01-29-2019 02:13 PM
Hi all,
I'm writing a DLL that will later be interfaced with some LabVIEW code. Because of LabVIEW's locking behavior on DLL's, I've written a wrapper DLL which calls my DLL function at runtime, so I can continue developing on the main DLL without having to close and reopen LabVIEW all the time. The problem is that the main DLL still has a lock on it, even though I've properly freed the library resource when I'm done calling the function.
In debugging, I've used WinDbg and found that LabVIEW has reached a breakpoint, but lacking debug symbols am unable to see how or why LabVIEW is on an internal breakpoint. Here's my WinDbg output:
Microsoft (R) Windows Debugger Version 10.0.17763.1 AMD64
Copyright (c) Microsoft Corporation. All rights reserved.
*** wait with pending attach
Symbol search path is: srv*
Executable search path is:
ModLoad: 00000000`00400000 00000000`02a6f000 C:\Program Files (x86)\National Instruments\LabVIEW 2013\LabVIEW.exe
ModLoad: 00007ffe`9f960000 00007ffe`9fb41000 C:\WINDOWS\SYSTEM32\ntdll.dll
ModLoad: 00000000`77070000 00000000`77200000 ntdll.dll
ModLoad: 00000000`76f80000 00000000`76fd2000 C:\WINDOWS\System32\wow64.dll
ModLoad: 00000000`76ff0000 00000000`77068000 C:\WINDOWS\System32\wow64win.dll
ModLoad: 00000000`76fe0000 00000000`76fea000 C:\WINDOWS\System32\wow64cpu.dll
ModLoad: 00000000`75c70000 00000000`75d50000 KERNEL32.dll
ModLoad: 00000000`75070000 00000000`75254000 KERNELBASE.dll
ModLoad: 00000000`75b00000 00000000`75b78000 ADVAPI32.dll
ModLoad: 00000000`757e0000 00000000`7589f000 msvcrt.dll
ModLoad: 00000000`716e0000 00000000`716e8000 WSOCK32.dll
ModLoad: 00000000`75d90000 00000000`75dd4000 SECHOST.dll
ModLoad: 00000000`76b80000 00000000`76be7000 WS2_32.dll
ModLoad: 00000000`76890000 00000000`76950000 RPCRT4.dll
ModLoad: 00000000`73930000 00000000`73950000 SspiCli.dll
ModLoad: 00000000`73920000 00000000`7392a000 CRYPTBASE.dll
ModLoad: 00000000`76ee0000 00000000`76f38000 bcryptPrimitives.dll
ModLoad: 00000000`73950000 00000000`74c9a000 SHELL32.dll
ModLoad: 00000000`76f40000 00000000`76f79000 CFGMGR32.dll
ModLoad: 00000000`76db0000 00000000`76ece000 ucrtbase.dll
ModLoad: 00000000`75b80000 00000000`75c08000 SHCORE.dll
ModLoad: 00000000`758a0000 00000000`75afc000 combase.dll
ModLoad: 00000000`75f40000 00000000`764f9000 Windows.Storage.dll
ModLoad: 00000000`76bf0000 00000000`76c35000 SHLWAPI.dll
ModLoad: 00000000`769d0000 00000000`769f2000 GDI32.dll
ModLoad: 00000000`74ca0000 00000000`74e04000 gdi32full.dll
ModLoad: 00000000`76950000 00000000`769cd000 msvcp_win.dll
ModLoad: 00000000`766c0000 00000000`7684d000 USER32.dll
ModLoad: 00000000`75d50000 00000000`75d67000 win32u.dll
ModLoad: 00000000`76510000 00000000`7651f000 AppCore.dll
ModLoad: 00000000`74e10000 00000000`74e28000 profapi.dll
ModLoad: 00000000`75020000 00000000`75065000 POWRPROF.dll
ModLoad: 00000000`76500000 00000000`76508000 FLTLIB.DLL
ModLoad: 00000000`74e30000 00000000`74ec6000 OLEAUT32.dll
ModLoad: 00000000`75df0000 00000000`75eec000 ole32.dll
ModLoad: 00000000`74ed0000 00000000`74fa6000 COMDLG32.dll
ModLoad: 00000000`75d70000 00000000`75d89000 imagehlp.dll
ModLoad: 00000000`76850000 00000000`76876000 IMM32.dll
ModLoad: 00000000`74fb0000 00000000`74fb6000 PSAPI.DLL
ModLoad: 00000000`71de0000 00000000`71e04000 WINMM.dll
ModLoad: 00000000`6ccc0000 00000000`6cec4000 COMCTL32.dll
ModLoad: 00000000`728f0000 00000000`728f8000 VERSION.dll
ModLoad: 00000000`721a0000 00000000`7220d000 WINSPOOL.DRV
ModLoad: 00000000`71e10000 00000000`71eb3000 MSVCR90.dll
ModLoad: 00000000`71ec0000 00000000`71f4e000 MSVCP90.dll
ModLoad: 00000000`71f50000 00000000`720bb000 gdiplus.dll
ModLoad: 00000000`71530000 00000000`71560000 IPHLPAPI.DLL
ModLoad: 00000000`71500000 00000000`71523000 WINMMBASE.dll
ModLoad: 00000000`71560000 00000000`716e0000 PROPSYS.dll
ModLoad: 00000000`72af0000 00000000`72b09000 bcrypt.dll
ModLoad: 00000000`10000000 00000000`100b1000 mgcore_SH_13_0.dll
ModLoad: 00000000`03020000 00000000`03041000 niCPULib.dll
ModLoad: 00000000`04d70000 00000000`05012000 dfir_13_0.dll
ModLoad: 00000000`05120000 00000000`0524e000 tdcore_13_0.dll
ModLoad: 00000000`72be0000 00000000`72d62000 dbghelp.dll
ModLoad: 00000000`72bb0000 00000000`72bd5000 dbgcore.dll
ModLoad: 00000000`72120000 00000000`7219c000 UxTheme.dll
ModLoad: 00000000`75260000 00000000`753a3000 MSCTF.dll
ModLoad: 00000000`76af0000 00000000`76b73000 CLBCatQ.DLL
ModLoad: 00000000`6b010000 00000000`6b410000 EXPLORERFRAME.dll
ModLoad: 00000000`058e0000 00000000`058ec000 QtManager452_2013.dll
ModLoad: 00000000`67000000 00000000`67221000 NIQtCore_2013.dll
ModLoad: 00000000`65000000 00000000`657b3000 NIQtGui_2013.dll
ModLoad: 00000000`6c9e0000 00000000`6ca03000 dwmapi.dll
ModLoad: 00000000`05ec0000 00000000`06023000 nilmClient.dll
ModLoad: 00000000`753b0000 00000000`757db000 SETUPAPI.dll
ModLoad: 00000000`12000000 00000000`12241000 xerces-c_2_6.dll
ModLoad: 00000000`7c3c0000 00000000`7c43c000 MSVCP71.dll
ModLoad: 00000000`6ca50000 00000000`6ca63000 NETAPI32.dll
ModLoad: 00000000`7c360000 00000000`7c3b6000 MSVCR71.dll
ModLoad: 00000000`06030000 00000000`06074000 xerces-depdom_2_6.dll
ModLoad: 00000000`72b30000 00000000`72b43000 CRYPTSP.dll
ModLoad: 00000000`72ac0000 00000000`72aef000 RSAENH.dll
ModLoad: 00000000`75de0000 00000000`75de7000 NSI.dll
ModLoad: 00000000`53400000 00000000`53403000 icmp.dll
ModLoad: 00000000`6c9c0000 00000000`6c9d1000 NAPINSP.dll
ModLoad: 00000000`6c9a0000 00000000`6c9b6000 PNRPNSP.dll
ModLoad: 00000000`6c980000 00000000`6c993000 nlaapi.dll
ModLoad: 00000000`72b50000 00000000`72ba6000 MSWSOCK.dll
ModLoad: 00000000`6d2f0000 00000000`6d37e000 DNSAPI.dll
ModLoad: 00000000`6c970000 00000000`6c97c000 WINRNR.dll
ModLoad: 00000000`6d380000 00000000`6d3cf000 fwpuclnt.dll
ModLoad: 00000000`6c960000 00000000`6c968000 rasadhlp.dll
ModLoad: 00000000`69570000 00000000`69576000 InjectionDll.dll
ModLoad: 00000000`061e0000 00000000`061e6000 nilmWizard.dll
ModLoad: 00000000`28000000 00000000`28030000 nicont.DLL
ModLoad: 00000000`76a00000 00000000`76a60000 coml2.dll
ModLoad: 00000000`65e90000 00000000`65f1e000 mscms.dll
ModLoad: 00000000`72a90000 00000000`72ab1000 USERENV.dll
ModLoad: 00000000`68b20000 00000000`68b2c000 ColorAdapterClient.dll
ModLoad: 00000000`65e50000 00000000`65e8e000 ICM32.dll
ModLoad: 00000000`09840000 00000000`098dd000 nitaglv.dll
ModLoad: 00000000`098e0000 00000000`0995d000 LKSOCK.dll
ModLoad: 00000000`09960000 00000000`09989000 LKSEC.dll
ModLoad: 00000000`09990000 00000000`099c9000 LKBROW.dll
ModLoad: 00000000`099d0000 00000000`09a0a000 LKDYNAM.dll
ModLoad: 00000000`09a40000 00000000`09a9a000 LKREALT.dll
ModLoad: 00000000`38130000 00000000`3817d000 nilvicv_hostdeploy.dll
ModLoad: 00000000`28400000 00000000`2844c000 NICONTDT.DLL
ModLoad: 00000000`456e0000 00000000`4575e000 RICHED20.dll
ModLoad: 00000000`692a0000 00000000`692b7000 USP10.dll
ModLoad: 00000000`0f330000 00000000`0f362000 msls31.dll
ModLoad: 00000000`63800000 00000000`63813000 NiSpyLog.dll
ModLoad: 00000000`0af80000 00000000`0afe3000 CallistoLV.dll
ModLoad: 00000000`0b000000 00000000`0b07d000 lvdaq.mxx
ModLoad: 00000000`6d280000 00000000`6d2b5000 nimdbgu.dll
ModLoad: 00000000`6e0c0000 00000000`6e0df000 nimercu.dll
ModLoad: 00000000`6db40000 00000000`6df26000 nidmxfu.dll
ModLoad: 00000000`6df50000 00000000`6e07b000 nilvaiu.dll
ModLoad: 00000000`6c3f0000 00000000`6c78d000 mfc90.dll
ModLoad: 00000000`6d000000 00000000`6d01c000 niorbu.dll
ModLoad: 00000000`6d0f0000 00000000`6d139000 nimxdfu.dll
ModLoad: 00000000`6e2c0000 00000000`6e2dc000 nimstsu.dll
ModLoad: 00000000`64580000 00000000`645e7000 NIPALU.dll
ModLoad: 00000000`6e0e0000 00000000`6e1c7000 nimhwcfu.dll
ModLoad: 00000000`6ec70000 00000000`6ecb8000 nimru2u.dll
ModLoad: 00000000`72290000 00000000`72296000 MSIMG32.dll
ModLoad: 00000000`64600000 00000000`64618000 nirpc.dll
ModLoad: 00000000`64500000 00000000`64506000 nipalut.dll
ModLoad: 00000000`1f700000 00000000`1f708000 NIPAL32.dll
ModLoad: 00000000`63550000 00000000`6355b000 nimdnsResponder.dll
ModLoad: 00000000`6d050000 00000000`6d07a000 nidimu.dll
ModLoad: 00000000`72e90000 00000000`73295000 WININET.dll
ModLoad: 00000000`6c100000 00000000`6c1b0000 WINHTTP.dll
ModLoad: 00000000`0b680000 00000000`0b6b0000 nicrtsiu.dll
ModLoad: 00000000`0b6b0000 00000000`0b6b9000 niprtsiu.dll
ModLoad: 00000000`5d360000 00000000`5d36d000 image00000000`5d360000
ModLoad: 00000000`36000000 00000000`360aa000 lvdesktop.mxx
ModLoad: 00000000`39800000 00000000`3989d000 lvelemio.mxx
ModLoad: 00000000`39900000 00000000`39a51000 lvfpga.mxx
ModLoad: 00000000`36500000 00000000`36511000 LvProjectProxy.mxx
ModLoad: 00000000`07b50000 00000000`07bbf000 LvRealTimeCoreProvider.mxx
ModLoad: 00000000`07bd0000 00000000`07bdd000 SystemStateClient.dll
ModLoad: 00000000`07be0000 00000000`07c0d000 lvRemoteWindows.mxx
ModLoad: 00000000`07c30000 00000000`07c8b000 lvrt_cvs.mxx
ModLoad: 00000000`07cb0000 00000000`07d0d000 lvrt_evs.mxx
ModLoad: 00000000`07d30000 00000000`07d8c000 lvrt_smartcamera.mxx
ModLoad: 00000000`07db0000 00000000`07e32000 LvTargetCoreProvider.mxx
ModLoad: 00000000`36700000 00000000`3678d000 MVEProvider.mxx
ModLoad: 00000000`61000000 00000000`61060000 NIQtXml_2013.dll
ModLoad: 00000000`36800000 00000000`36877000 mxLvProvider.mxx
ModLoad: 00000000`12c00000 00000000`12c1f000 mxwProjectProvider.mxx
ModLoad: 00000000`78230000 00000000`782ef000 MSVCR100.dll
ModLoad: 00000000`774c0000 00000000`77529000 MSVCP100.dll
ModLoad: 00000000`12f40000 00000000`13339000 mxwTask.dll
ModLoad: 00000000`78970000 00000000`78996000 ATL100.DLL
ModLoad: 00000000`11280000 00000000`114f9000 mxwRCENU.dll
ModLoad: 00000000`0bab0000 00000000`0bad8000 nimxlcpp.mxx
ModLoad: 00000000`6a7a0000 00000000`6a7b5000 nimxlc.dll
ModLoad: 00000000`36100000 00000000`36191000 variable.mxx
ModLoad: 00000000`0bcb0000 00000000`0bd5d000 ws_project_provider.mxx
ModLoad: 00000000`0bd60000 00000000`0bdd2000 lvMax.dll
ModLoad: 00000000`0bde0000 00000000`0be4f000 nidp_host_end.dll
ModLoad: 00000000`39b00000 00000000`39b78000 lvfpga_runt.dll
ModLoad: 00000000`1bfa0000 00000000`1bfc9000 nimaximp.dll
ModLoad: 00000000`0c0f0000 00000000`0c147000 nierInterface.dll
ModLoad: 00000000`0c170000 00000000`0c18a000 ni_traceengine.dll
ModLoad: 00000000`0de30000 00000000`0df5a000 lvanlys.dll
ModLoad: 00000000`0ea60000 00000000`0f16c000 LV130000_BLASLAPACK.dll
ModLoad: 00000000`0cd30000 00000000`0cd64000 niceipcore.dll
ModLoad: 00000000`69100000 00000000`6914f000 DataExchange.dll
ModLoad: 00000000`68ea0000 00000000`690f2000 d3d11.dll
ModLoad: 00000000`68d60000 00000000`68e9c000 dcomp.dll
ModLoad: 00000000`68cc0000 00000000`68d58000 dxgi.dll
ModLoad: 00000000`68b50000 00000000`68cb5000 twinapi.appcore.dll
ModLoad: 00000000`68b30000 00000000`68b4a000 RMCLIENT.dll
ModLoad: 00000000`12a50000 00000000`12b32000 mesa.dll
ModLoad: 00000000`68510000 00000000`6858d000 TextInputFramework.dll
ModLoad: 00000000`67e20000 00000000`67eab000 CoreMessaging.dll
ModLoad: 00000000`17d50000 00000000`17fad000 CoreUIComponents.dll
ModLoad: 00000000`6c1d0000 00000000`6c1f9000 NTMARTA.dll
ModLoad: 00000000`6b560000 00000000`6b636000 WinTypes.dll
ModLoad: 00000000`02b60000 00000000`02b6e000 imt-wrapper.dll
ModLoad: 00000000`02c60000 00000000`02c7b000 VCRUNTIME140D.dll
ModLoad: 00000000`187b0000 00000000`18924000 ucrtbased.dll
ModLoad: 00000000`02c80000 00000000`02c8f000 imt.dll
(da80.6a6c): Break instruction exception - code 80000003 (first chance)
ntdll!DbgBreakPoint:
00007ffe`9f9fd8d0 cc int 3
0:025> !gle
LastErrorValue: (Win32) 0 (0) - The operation completed successfully.
LastStatusValue: (NTSTATUS) 0 - STATUS_SUCCESS
Wow64 TEB status: 3702784
LastErrorValue: (Win32) 0 (0) - The operation completed successfully.
LastStatusValue: (NTSTATUS) 0 - STATUS_SUCCESS
0:025> .exr -1
ExceptionAddress: 00007ffe9f9fd8d0 (ntdll!DbgBreakPoint)
ExceptionCode: 80000003 (Break instruction exception)
ExceptionFlags: 00000000
NumberParameters: 1
Parameter[0]: 0000000000000000
0:025> !analyze -v
*******************************************************************************
* *
* Exception Analysis *
* *
*******************************************************************************
*** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\Program Files (x86)\National Instruments\LabVIEW 2013\LabVIEW.exe -
*** ERROR: Symbol file could not be found. Defaulted to export symbols for mgcore_SH_13_0.dll -
GetUrlPageData2 (WinHttp) failed: 12007.
KEY_VALUES_STRING: 1
STACKHASH_ANALYSIS: 1
TIMELINE_ANALYSIS: 1
Timeline: !analyze.Start
Name: <blank>
Time: 2019-01-29T19:59:00.700Z
Diff: 700 mSec
Timeline: Dump.Current
Name: <blank>
Time: 2019-01-29T19:59:00.0Z
Diff: 0 mSec
Timeline: Process.Start
Name: <blank>
Time: 2019-01-29T19:50:02.0Z
Diff: 538000 mSec
Timeline: OS.Boot
Name: <blank>
Time: 2019-01-29T03:10:58.0Z
Diff: 60482000 mSec
DUMP_CLASS: 2
DUMP_QUALIFIER: 0
FAULTING_IP:
ntdll!DbgBreakPoint+0
00007ffe`9f9fd8d0 cc int 3
EXCEPTION_RECORD: (.exr -1)
ExceptionAddress: 00007ffe9f9fd8d0 (ntdll!DbgBreakPoint)
ExceptionCode: 80000003 (Break instruction exception)
ExceptionFlags: 00000000
NumberParameters: 1
Parameter[0]: 0000000000000000
FAULTING_THREAD: 00006a6c
BUGCHECK_STR: BREAKPOINT
DEFAULT_BUCKET_ID: BREAKPOINT
ERROR_CODE: (NTSTATUS) 0x80000003 - {EXCEPTION} Breakpoint A breakpoint has been reached.
EXCEPTION_CODE: (HRESULT) 0x80000003 (2147483651) - One or more arguments are invalid
EXCEPTION_CODE_STR: 80000003
EXCEPTION_PARAMETER1: 0000000000000000
WATSON_BKT_PROCSTAMP: 533c6210
WATSON_BKT_PROCVER: 13.0.1.4020
PROCESS_VER_PRODUCT: National Instruments LabVIEW
WATSON_BKT_MODULE: ntdll.dll
WATSON_BKT_MODSTAMP: 60d78cf9
WATSON_BKT_MODOFFSET: 9d8d0
WATSON_BKT_MODVER: 10.0.17134.376
MODULE_VER_PRODUCT: Microsoft® Windows® Operating System
BUILD_VERSION_STRING: 17134.1.amd64fre.rs4_release.180410-1804
MODLIST_WITH_TSCHKSUM_HASH: f200853ba633a847c8d03a15d7c62a09fff6b561
MODLIST_SHA1_HASH: 5529edf10d24079311335b0c868559c736add5c7
NTGLOBALFLAG: 0
PROCESS_BAM_CURRENT_THROTTLED: 0
PROCESS_BAM_PREVIOUS_THROTTLED: 0
APPLICATION_VERIFIER_FLAGS: 0
PRODUCT_TYPE: 1
SUITE_MASK: 272
DUMP_TYPE: fe
PROCESS_NAME: unknown
ANALYSIS_SESSION_HOST: JEREMY-PC
ANALYSIS_SESSION_TIME: 01-29-2019 14:59:00.0700
ANALYSIS_VERSION: 10.0.17763.1 amd64fre
THREAD_ATTRIBUTES:
OS_LOCALE: ENU
PRIMARY_PROBLEM_CLASS: BREAKPOINT
PROBLEM_CLASSES:
ID: [0n321]
Type: [@APPLICATION_FAULT_STRING]
Class: Primary
Scope: DEFAULT_BUCKET_ID (Failure Bucket ID prefix)
BUCKET_ID
Name: Omit
Data: Add
String: [BREAKPOINT]
PID: [Unspecified]
TID: [Unspecified]
Frame: [0]
STACK_TEXT:
00000000`02bdfc78 00007ffe`9fa29a4b : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : ntdll!DbgBreakPoint
00000000`02bdfc80 00007ffe`9f9d147f : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : ntdll!DbgUiRemoteBreakin+0x4b
00000000`02bdfcb0 00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : ntdll!RtlUserThreadStart+0x2f
THREAD_SHA1_HASH_MOD_FUNC: 7022ac660180cc117dbba4701e87bc997be1e021
THREAD_SHA1_HASH_MOD_FUNC_OFFSET: 8612d4bd97ca375e13535eeed5263302dc2a124c
THREAD_SHA1_HASH_MOD: ec3b5fdb1c6f649ec34d8fd34d70509a58a63226
FOLLOWUP_IP:
ntdll!DbgBreakPoint+0
00007ffe`9f9fd8d0 cc int 3
FAULT_INSTR_CODE: ccccc3cc
SYMBOL_STACK_INDEX: 0
SYMBOL_NAME: ntdll!DbgBreakPoint+0
FOLLOWUP_NAME: MachineOwner
MODULE_NAME: ntdll
IMAGE_NAME: ntdll.dll
DEBUG_FLR_IMAGE_TIMESTAMP: 60d78cf9
STACK_COMMAND: ~25s ; .cxr ; kb
BUCKET_ID: MANUAL_BREAKIN
FAILURE_EXCEPTION_CODE: 80000003
FAILURE_IMAGE_NAME: ntdll.dll
BUCKET_ID_IMAGE_STR: ntdll.dll
FAILURE_MODULE_NAME: ntdll
BUCKET_ID_MODULE_STR: ntdll
FAILURE_FUNCTION_NAME: DbgBreakPoint
BUCKET_ID_FUNCTION_STR: DbgBreakPoint
BUCKET_ID_OFFSET: 0
BUCKET_ID_MODTIMEDATESTAMP: 60d78cf9
BUCKET_ID_MODCHECKSUM: 1df93f
BUCKET_ID_MODVER_STR: 10.0.17134.376
BUCKET_ID_PREFIX_STR: MANUAL_BREAKIN
FAILURE_PROBLEM_CLASS: BREAKPOINT
FAILURE_SYMBOL_NAME: ntdll.dll!DbgBreakPoint
FAILURE_BUCKET_ID: BREAKPOINT_80000003_ntdll.dll!DbgBreakPoint
WATSON_STAGEONE_URL: http://watson.microsoft.com/StageOne/unknown/13.0.1.4020/533c6210/ntdll.dll/10.0.17134.376/60d78cf9/80000003/0009d8d0.htm?Retriage=1
TARGET_TIME: 2019-01-29T19:59:05.000Z
OSBUILD: 17134
OSSERVICEPACK: 1
SERVICEPACK_NUMBER: 0
OS_REVISION: 0
OSPLATFORM_TYPE: x64
OSNAME: Windows 10
OSEDITION: Windows 10 WinNt SingleUserTS
USER_LCID: 0
OSBUILD_TIMESTAMP: unknown_date
BUILDDATESTAMP_STR: 180410-1804
BUILDLAB_STR: rs4_release
BUILDOSVER_STR: 10.0.17134.1.amd64fre.rs4_release.180410-1804
ANALYSIS_SESSION_ELAPSED_TIME: 1363
ANALYSIS_SOURCE: UM
FAILURE_ID_HASH_STRING: um:breakpoint_80000003_ntdll.dll!dbgbreakpoint
FAILURE_ID_HASH: {1d20f983-583a-5d58-a854-5c812a87c587}
Followup: MachineOwner
---------
In particular, the following segments are relevant:
ERROR_CODE: (NTSTATUS) 0x80000003 - {EXCEPTION} Breakpoint A breakpoint has been reached.
EXCEPTION_CODE: (HRESULT) 0x80000003 (2147483651) - One or more arguments are invalid
---
ModLoad: 00000000`02b60000 00000000`02b6e000 imt-wrapper.dll
ModLoad: 00000000`02c60000 00000000`02c7b000 VCRUNTIME140D.dll
ModLoad: 00000000`187b0000 00000000`18924000 ucrtbased.dll
ModLoad: 00000000`02c80000 00000000`02c8f000 imt.dll
(da80.6a6c): Break instruction exception - code 80000003 (first chance)
ntdll!DbgBreakPoint:
00007ffe`9f9fd8d0 cc int 3
imt-wrapper is the wrapper around the main dll, imt.dll.
Here's the main .cpp file for imt-wrapper.dll. Can provide full project files to build if need be, but it's pretty much the same code everyone else uses out on StackOverflow and otherwise.
// imt-wrapper-dll.cpp : Defines the entry point for the application.
//
#include <windows.h>
#include <string>
#include "imt-wrapper-dll.h"
const LPCSTR dll_path = "C:\\Users\\Jeremy\\Desktop\\LV_devel\\imt-c-controller\\win64\\lib\\Debug\\imt.dll";
/* Define a function pointer for our imported
* function.
* This reads as "introduce the new type f_funci as the type:
* pointer to a function returning an int and
* taking no arguments.
*
* Make sure to use matching calling convention (__cdecl, __stdcall, ...)
* with the exported function. __stdcall is the convention used by the WinAPI
*/
typedef int(__cdecl *ctx_check_t)(const void *);
// could be templated in the future
__declspec(dllexport) int __cdecl LV_check_context(const void *ctx_ext)
{
HINSTANCE hGetProcIDDLL = LoadLibrary(dll_path);
if (!hGetProcIDDLL) {
return -100;
}
// resolve function address here
ctx_check_t ctx_check = (ctx_check_t)GetProcAddress(hGetProcIDDLL, "imt_check_context");
BOOL fResult = FreeLibrary(hGetProcIDDLL);
if (!fResult) {
return -101;
}
if (!ctx_check) {
return -102;
}
return ctx_check(ctx_ext);
}
All the header file has is the extern declaration for `LV_check_context`.
If it helps, both dll's are built with CMake 3.8, Visual Studio 2017 Community Edition, on a Debug release configuration.
Solved! Go to Solution.
01-29-2019 02:18 PM
Here's the code within imt.dll that we're attempting to call. This all works fine in LabVIEW, by the way! I just need it to not lock the main DLL.
int imt_check_context(const void *ctx_ext)
{
if(!ctx_ext) {
return -1;
}
imt_context_t *ctx = (imt_context_t *) ctx_ext;
// TODO: error codes, define them
enum imt_error_t {
I_OKAY = 0,
I_CHK_WEIGHT,
I_CHK_CONC,
I_CHK_RANGE,
I_CHK_CAP,
I_CHK_CYCLE_LENGTH,
I_CHK_XN,
I_CHK_DEXVAR,
I_CHK_INSVAR,
I_CHK_MISC,
};
#define CHK(var_, min_, max_, ret_) \
do {\
if((ctx->var_) < (min_) || (ctx->var_) > (max_)) return ret_;\
} while(0)
CHK(weight, 0.0, 500.0, I_CHK_WEIGHT);
CHK(INS_concentration, 0.1, 10.0, I_CHK_CONC);
CHK(DEX_concentration, 10.0, 100.0, I_CHK_CONC);
CHK(Xmin, 60.0, 180.0, I_CHK_RANGE);
CHK(Xmax, ctx->Xmin + 40.0, 200.0, I_CHK_RANGE);
return I_OKAY;
}
and the definition for imt_context_t:
typedef double imt_float_t;
typedef int imt_int_t;
typedef struct imt_context_t {
imt_float_t weight; // kg
imt_float_t INS_concentration; // U/mL
imt_float_t DEX_concentration; // g/100mL
imt_float_t Xmin; // mg/dL
imt_float_t Xmax; // mg/dL
imt_float_t INS_flow_cap; // U/kg/hr
imt_float_t DEX_flow_cap; // mg/kg/min
imt_float_t long_cycle_length; // mins
/* glucose variables */
imt_float_t Xa;
imt_float_t Xb;
imt_float_t Xc;
/* dextrose variables */
imt_float_t DEXfp;
imt_float_t DEXfn;
imt_float_t DEXfn2c;
imt_float_t DEXfn3c;
imt_float_t DEX_bolus;
imt_float_t DEX_bolus_minus1;
imt_float_t DEX_bolus_minus2;
imt_float_t DEX_bolus_minus3;
imt_float_t DEX_pump;
imt_float_t DEXfn3c_cap;
imt_float_t DEX_pump_cap;
/* insulin variables */
imt_float_t INSfp_minus1;
imt_float_t INSfp;
imt_float_t INSfn;
imt_float_t INSfn2c;
imt_float_t INS_pump;
imt_float_t INSfn2c_cap;
imt_float_t INS_pump_cap;
/* time controller variables */
imt_int_t next_cycle_5min;
imt_int_t _5min_bt_Xa_Xb;
imt_int_t _5min_bt_Xb_Xc;
/* flags */
imt_int_t tertiary_active;
} imt_context_t;
As you can see, no breakpoints, all vanilla C, so no exceptions either.
I've also attached the VI I'm using to test the DLL, it's quite simple.
01-29-2019 03:11 PM
Just tried to use LoadLibraryEx, as my DLL doesn't use a DLLMain function (which is allowed). No change, main DLL still locked.
HINSTANCE hGetProcIDDLL = LoadLibraryEx(dll_path, NULL, DONT_RESOLVE_DLL_REFERENCES);
01-29-2019 03:52 PM - edited 01-29-2019 03:57 PM
01-29-2019 04:17 PM
Thank you for saving me from WinDbg hell! This should be mentioned on the KB article that talks about how to build DLL's, avoiding the need to do this:
> Calling the DLL from another C program is also an excellent way to debug your DLL. By doing this, you have a means of testing your DLL independent of LabVIEW, thus helping you identify possible problems sooner.