Thread overview | |||||
---|---|---|---|---|---|
|
June 04, 2013 Access violation when exiting program | ||||
---|---|---|---|---|
| ||||
Hi, The following program runs, loads the DLL, excutes the function, returns the correct value and unloads the DLL, but on exiting causes an exception: Unhandled exception at 0x0040f9c0 in USBRelay.exe: 0xC0000005: Access violation writing location 0xffffffea. The FT_STATUS is declared... alias uint FT_STATUS; The function is declared... alias extern (C) FT_STATUS function(uint* lpdwVersion) FT_GetLibraryVersion; The main program is... module main; import std.stdio, ftd2xx, core.runtime, std.exception, std.c.windows.windows; int main(string[] argv) { string dllFilename = "FTD2XX.DLL"; uint libVer; auto hDLL = enforce(cast(HMODULE)Runtime.loadLibrary(dllFilename)); scope (exit) Runtime.unloadLibrary(hDLL); FT_GetLibraryVersion GetLibraryVersion = enforce(cast(FT_GetLibraryVersion)GetProcAddress(hDLL, "FT_GetLibraryVersion")); FT_STATUS rv = GetLibraryVersion(&libVer); writefln("Version : %0x", libVer); return 0; } I'm sure its something stupid but nothing leaps out from the screen. Am I using the loadLibrary and enforce correctly? Regards, Frank. |
June 18, 2013 Re: Access violation when exiting program | ||||
---|---|---|---|---|
| ||||
Posted in reply to Frank Fuente | On Tuesday, 4 June 2013 at 14:06:29 UTC, Frank Fuente wrote: > The function is declared... > alias extern (C) FT_STATUS function(uint* lpdwVersion) FT_GetLibraryVersion; The calling convention is wrongly declared, it should be: > alias extern (Windows) FT_STATUS function(uint* lpdwVersion) FT_GetLibraryVersion; From the header file[1] I can see it uses the WINAPI macro, which makes the function have the stdcall calling convention (extern(Windows) in D). ftp://ftp.mn-net.com/Rapid_Tests/Software/USB%20DRIVER/FTDI_USB_32BIT/FTD2XX.H |
June 18, 2013 Re: Access violation when exiting program | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrej Mitrovic | On Tuesday, 18 June 2013 at 00:16:10 UTC, Andrej Mitrovic wrote:
> On Tuesday, 4 June 2013 at 14:06:29 UTC, Frank Fuente wrote:
>> The function is declared...
>> alias extern (C) FT_STATUS function(uint* lpdwVersion) FT_GetLibraryVersion;
>
> The calling convention is wrongly declared, it should be:
>
>> alias extern (Windows) FT_STATUS function(uint* lpdwVersion) FT_GetLibraryVersion;
>
> From the header file[1] I can see it uses the WINAPI macro, which makes the function have the stdcall calling convention (extern(Windows) in D).
>
> ftp://ftp.mn-net.com/Rapid_Tests/Software/USB%20DRIVER/FTDI_USB_32BIT/FTD2XX.H
Btw, apologies for the late reply.
|
Copyright © 1999-2021 by the D Language Foundation