Hi Kaz,
I cannot test whether the application crashes, because I don’t have the required vendor DLLs installed.
However, I cannot reproduce your observation that GDI32.dll and OLEAUT32.dll are not linked when building with WITH_PVA=YES. My build environment is identical to yours.
I built DexelaApp.exe with WITH_PVA=YES and I see the following. Note that GDI32.dll and OLEAUT32.dll are included.
J:\epics\devel\areaDetector-3-2\ADDexela\iocs\dexelaIOC\bin\windows-x64-static-vs2017>dumpbin /imports DexelaApp.exe
Microsoft (R) COFF/PE Dumper Version 14.12.25830.2
Copyright (C) Microsoft Corporation. All rights reserved.
Dump of file DexelaApp.exe
File Type: EXECUTABLE IMAGE
Section contains the following imports:
BusScanner.dll
140AEA078 Import Address Table
140DC2C20 Import Name Table
0 time date stamp
0 Index of first forwarder reference
17 ?EnumerateDevices@BusScanner@@QEAAHXZ
19 ?GetDevice@BusScanner@@QEAA?AUDevInfo@@H@Z
1 ??0BusScanner@@QEAA@XZ
DexImage.dll
140AEA098 Import Address Table
140DC2C40 Import Name Table
0 time date stamp
0 Index of first forwarder reference
54 ?IsEmpty@DexImage@@QEAA_NXZ
65 ?LoadDarkImage@DexImage@@QEAAXAEBV1@@Z
99 ?UnscrambleImage@DexImage@@QEAAXXZ
2A ?FloodCorrection@DexImage@@QEAAXXZ
96 ?SubtractDark@DexImage@@QEAAXXZ
25 ?FindMedianofPlanes@DexImage@@QEAAXXZ
27 ?FixFlood@DexImage@@QEAAXXZ
34 ?GetDataPointerToPlane@DexImage@@QEAAPEAXH@Z
9F ?WriteImage@DexImage@@QEAAXPEBD@Z
74 ?ReadImage@DexImage@@QEAAXPEBD@Z
9 ??1DexImage@@QEAA@XZ
B ??4DexImage@@QEAAXAEBV0@@Z
5 ??0DexImage@@QEAA@XZ
7D ?SetDarkOffset@DexImage@@QEAAXH@Z
88 ?SetImageType@DexImage@@QEAAXW4DexImageTypes@@@Z
6D ?LoadFloodImage@DexImage@@QEAAXAEBV1@@Z
DexelaDetector.dll
140AEA120 Import Address Table
140DC2CC8 Import Name Table
0 time date stamp
0 Index of first forwarder reference
80 ?GetSerialNumber@DexelaDetector@@QEAAHXZ
70 ?GetModelNumber@DexelaDetector@@QEAAHXZ
9A ?IsLive@DexelaDetector@@QEAA_NXZ
E4 ?Snap@DexelaDetector@@QEAAXHH@Z
88 ?GoLiveSeq@DexelaDetector@@QEAAXHHH@Z
89 ?GoLiveSeq@DexelaDetector@@QEAAXXZ
8B ?GoUnLive@DexelaDetector@@QEAAXXZ
E6 ?SoftwareTrigger@DexelaDetector@@QEAAXXZ
53 ?EnablePulseGenerator@DexelaDetector@@QEAAXM@Z
54 ?EnablePulseGenerator@DexelaDetector@@QEAAXXZ
50 ?DisablePulseGenerator@DexelaDetector@@QEAAXXZ
F6 ?ToggleGenerator@DexelaDetector@@QEAAXH@Z
CA ?SetCallback@DexelaDetector@@QEAAXP6AXHHPEAV1@@Z@Z
CB ?SetCallbackData@DexelaDetector@@QEAAXPEAX@Z
5E ?GetCallbackData@DexelaDetector@@QEAAPEAXXZ
7C ?GetSensorHeight@DexelaDetector@@QEAAGG@Z
7E ?GetSensorWidth@DexelaDetector@@QEAAGG@Z
B8 ?QueryFullWellMode@DexelaDetector@@QEAAHW4FullWellModes@@@Z
D3 ?SetGapTime@DexelaDetector@@QEAAXM@Z
A0 ?OpenBoard@DexelaDetector@@UEAAXXZ
58 ?GetBinningMode@DexelaDetector@@QEAA?AW4bins@@XZ
0 ??0DexelaDetector@@QEAA@AEAUDevInfo@@@Z
15 ??1DexelaDetector@@UEAA@XZ
42 ?CloseBoard@DexelaDetector@@QEAAXXZ
5A ?GetBufferXdim@DexelaDetector@@QEAAHXZ
5C ?GetBufferYdim@DexelaDetector@@QEAAHXZ
72 ?GetNumBuffers@DexelaDetector@@QEAAHXZ
B4 ?QueryBinningMode@DexelaDetector@@QEAAHW4bins@@@Z
BE ?ReadBuffer@DexelaDetector@@QEAAXHAEAVDexImage@@H@Z
D1 ?SetFullWellMode@DexelaDetector@@QEAAXW4FullWellModes@@@Z
CC ?SetExposureMode@DexelaDetector@@QEAAXW4ExposureModes@@@Z
D5 ?SetNumOfExposures@DexelaDetector@@QEAAXH@Z
CF ?SetExposureTime@DexelaDetector@@QEAAXM@Z
C8 ?SetBinningMode@DexelaDetector@@QEAAXW4bins@@@Z
E2 ?SetTriggerSource@DexelaDetector@@QEAAXW4ExposureTriggerSource@@@Z
DexelaException.dll
140AEA240 Import Address Table
140DC2DE8 Import Name Table
0 time date stamp
0 Index of first forwarder reference
D ?GetTransportMessage@DexelaException@@QEAAPEBDXZ
A ?GetFunctionName@DexelaException@@QEAAPEBDXZ
GDI32.dll
140AEA258 Import Address Table
140DC2E00 Import Name Table
0 time date stamp
0 Index of first forwarder reference
2C CreateBitmapIndirect
16C DeleteMetaFile
16B DeleteEnhMetaFile
28A GetMetaFileA
28B GetMetaFileBitsEx
2F2 PlayEnhMetaFile
37 CreateDIBSection
34A SelectObject
16A DeleteDC
31 CreateCompatibleDC
13 BitBlt
37F SetWinMetaFileBits
26D GetEnhMetaFileHeader
294 GetObjectA
269 GetEnhMetaFileA
16D DeleteObject
OLEAUT32.dll
140AEA858 Import Address Table
140DC3400 Import Name Table
0 time date stamp
0 Index of first forwarder reference
Ordinal 20
Ordinal 23
Ordinal 19
Ordinal 40
Ordinal 24
WS2_32.dll
140AEA8F8 Import Address Table
140DC34A0 Import Name Table
0 time date stamp
0 Index of first forwarder reference
Ordinal 115
Ordinal 55
Ordinal 56
Ordinal 52
Ordinal 51
Ordinal 23
Ordinal 18
Ordinal 116
Ordinal 11
Ordinal 4
Ordinal 3
Ordinal 13
Ordinal 2
Ordinal 21
Ordinal 20
Ordinal 17
Ordinal 6
3A WSAIoctl
Ordinal 14
Ordinal 111
Ordinal 22
Ordinal 19
Ordinal 16
Ordinal 7
Ordinal 5
Ordinal 9
Ordinal 8
Ordinal 15
Ordinal 57
Ordinal 112
B5 inet_ntop
Ordinal 151
Ordinal 10
Ordinal 1
Ordinal 12
ADVAPI32.dll
140AEA000 Import Address Table
140DC2BA8 Import Name Table
0 time date stamp
0 Index of first forwarder reference
D2 CryptGenRandom
2AD RegisterEventSourceA
2BF ReportEventA
17A GetUserNameA
2A8 RegSetValueExA
263 RegCreateKeyExA
298 RegQueryValueExA
278 RegEnumKeyA
ED DeregisterEventSource
DC CryptReleaseContext
C2 CryptAcquireContextW
28B RegOpenKeyExA
27C RegEnumValueA
25B RegCloseKey
USER32.dll
140AEA888 Import Address Table
140DC3430 Import Name Table
0 time date stamp
0 Index of first forwarder reference
2F7 ReleaseDC
141 GetDC
282 MessageBoxA
135 GetClipboardData
31D SetClipboardData
4D CloseClipboard
29A OpenClipboard
153 GetFocus
E8 EmptyClipboard
KERNEL32.dll
140AEA2E0 Import Address Table
140DC2E88 Import Name Table
0 time date stamp
0 Index of first forwarder reference
38B IsValidLocale
30F GetTimeFormatW
226 GetDateFormatW
415 OutputDebugStringW
351 HeapReAlloc
34E HeapFree
34A HeapAlloc
50E SetCurrentDirectoryA
51A SetEnvironmentVariableW
519 SetEnvironmentVariableA
1B6 GetACP
1DB GetCommandLineW
1EE GetConsoleCP
46D ReadConsoleW
200 GetConsoleMode
259 GetFullPathNameA
215 GetCurrentDirectoryW
311 GetTimeZoneInformation
1B0 FreeLibraryAndExitThread
163 ExitThread
F0 CreateThread
2F9 GetTempPathW
5AF TzSpecificLocalTimeToSystemTime
52C SetFileTime
54F SetStdHandle
4EF SetConsoleCtrlHandler
157 EnumSystemLocalesW
114 DeleteFileW
3E4 MoveFileExW
B9 CreateDirectoryW
245 GetFileAttributesExW
353 HeapSize
389 IsValidCodePage
29A GetOEMCP
23A GetEnvironmentStringsW
1AE FreeEnvironmentStringsW
17E FindFirstFileExA
317 GetUserDefaultLCID
1A3 FlushFileBuffers
529 SetFilePointerEx
618 WriteConsoleW
279 GetModuleHandleExW
276 GetModuleFileNameW
2D5 GetStdHandle
16E FileTimeToSystemTime
58F SystemTimeToTzSpecificLocalTime
41E PeekNamedPipe
4CC RtlCaptureStackBackTrace
21C GetCurrentProcessId
86 CloseHandle
4B1 ReleaseSemaphore
5DE WaitForSingleObject
E7 CreateSemaphoreA
C2 CreateFileA
24E GetFileSize
470 ReadFile
583 Sleep
263 GetLastError
33F GlobalMemoryStatusEx
33E GlobalMemoryStatus
414 OutputDebugStringA
26A GetLogicalDrives
332 GlobalAlloc
344 GlobalUnlock
33D GlobalLock
339 GlobalFree
179 FindClose
17D FindFirstFileA
18E FindNextFileA
573 SetUnhandledExceptionFilter
51B SetErrorMode
2C1 GetProcessTimes
21B GetCurrentProcess
592 TerminateProcess
23F GetExitCodeProcess
DF CreateProcessA
2EA GetSystemTime
31F GetVersionExA
3DA MapViewOfFile
1A6 FlushViewOfFile
5B7 UnmapViewOfFile
1AF FreeLibrary
275 GetModuleFileNameA
277 GetModuleHandleA
2B1 GetProcAddress
3C5 LoadResource
3D7 LockResource
582 SizeofResource
3BF LoadLibraryA
3CC LocalFree
1AA FormatMessageA
C3 CreateFileMappingA
2D2 GetStartupInfoA
197 FindResourceA
58E SystemTimeToFileTime
362 InitializeCriticalSection
133 EnterCriticalSection
3BB LeaveCriticalSection
10F DeleteCriticalSection
5A4 TlsAlloc
5A6 TlsGetValue
5A7 TlsSetValue
5A5 TlsFree
162 ExitProcess
CA CreateFileW
528 SetFilePointer
619 WriteFile
3C8 LocalAlloc
605 WideCharToMultiByte
3EB MultiByteToWideChar
2E2 GetSystemDirectoryA
12D DuplicateHandle
4AD ReleaseMutex
D6 CreateMutexA
21F GetCurrentThread
220 GetCurrentThreadId
2EC GetSystemTimeAsFileTime
165 ExpandEnvironmentStringsA
3C0 LoadLibraryExA
24A GetFileInformationByHandle
516 SetEndOfFile
51C SetEvent
BB CreateEventA
184 FindFirstFileW
190 FindNextFileW
25C GetFullPathNameW
2EE GetSystemTimes
272 GetMaximumProcessorCount
2B6 GetProcessHandleCount
3A6 K32GetProcessMemoryInfo
1DA GetCommandLineA
31E GetVersion
214 GetCurrentDirectoryA
563 SetThreadPriority
304 GetThreadPriority
240 GetExitCodeThread
58B SuspendThread
4C9 ResumeThread
2A6 GetPriorityClass
2E6 GetSystemInfo
2EB GetSystemTimeAdjustment
449 QueryPerformanceCounter
44A QueryPerformanceFrequency
5AD TryEnterCriticalSection
30A GetTickCount
251 GetFileType
232 GetDriveTypeW
3C1 LoadLibraryExW
36D InterlockedPushEntrySList
4CB RtlCaptureContext
4D2 RtlLookupFunctionEntry
4D9 RtlVirtualUnwind
5B4 UnhandledExceptionFilter
384 IsProcessorFeaturePresent
4C3 ResetEvent
5DF WaitForSingleObjectEx
BE CreateEventW
27A GetModuleHandleW
367 InitializeSListHead
37D IsDebuggerPresent
2D3 GetStartupInfoW
12F EncodePointer
108 DecodePointer
537 SetLastError
363 InitializeCriticalSectionAndSpinCount
9A CompareStringW
3AF LCMapStringW
267 GetLocaleInfoW
2DA GetStringTypeW
1C5 GetCPInfo
4D8 RtlUnwindEx
4D4 RtlPcToFileHeader
45F RaiseException
2B7 GetProcessHeap
WINMM.dll
140AEA8D8 Import Address Table
140DC3480 Import Name Table
0 time date stamp
0 Index of first forwarder reference
87 timeEndPeriod
86 timeBeginPeriod
88 timeGetDevCaps
Summary
2E5000 .data
7C000 .pdata
2DB000 .rdata
14000 .reloc
AE9000 .text
11000 _RDATA
This output of “strings” proves it was built with PVA
[epics@corvette windows-x64-static-vs2017]$ strings DexelaApp.exe | grep -i pva
NDPluginPva
NDPvaConfigure
EPICS_PVA_DEBUG
../PVAttribute.cpp
../PVAttribute.cpp
../PVAttribute.cpp
../PVAttribute.cpp
PVAttribute
PVAttribute
PVAttribute
../PVAttribute.cpp
../PVAttribute.cpp
../PVAttribute.cpp
../PVAttribute.cpp
../PVAttribute.cpp
../PVAttribute.cpp
../PVAttribute.cpp
../PVAttribute.cpp
../PVAttribute.cpp
EPICS_PVA_DEBUG
EPICS_PVA_DEBUG
EPICS_PVA_DEBUG
EPICS_PVA_DEBUG
EPICS_PVAS_PROVIDER_NAMES
Warning: startPVAServer() no longer accepts provider list as argument.
Instead place the following before calling startPVAServer() and iocInit()
epicsEnvSet("EPICS_PVAS_PROVIDER_NAMES", "%s")
PVA server already running
…
Mark