D and .lib files. C++/Other?
Nicholas Wilson via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sat Jul 1 16:49:03 PDT 2017
On Saturday, 1 July 2017 at 20:47:55 UTC, Damien Gibson wrote:
> Well I finally somehow got it to stop complaining about a bad
> lib file, but now it wants to tell me the entry point for the
> functions i list isnt correct, so now im just unsure if its
> being stupid on me or im not writing something write on the D
> or C++ end...
>
> The D code:
> _______________________________________________________________
> import std.stdio;
>
> export:
>
> void ConsoleWrite()
> {
> writeln("This is a test written in DLang/DMD!");
> }
>
> void ConsoleWait()
> {
> readln();
> }
> _______________________________________________________________
>
> i imported the stuff on CPP and tried to call it.. this is the
> hpp file:
>
> myclass.hpp:
> _______________________________________________________________
> #pragma once
>
> #ifdef _MYDLL_EXPORTS
> #define DllAPI __declspec(dllexport)
> #else
> #define DllAPI __declspec(dllimport)
> #endif
>
> DllAPI void ConsoleWrite();
> DllAPI void ConsoleWait();
> _______________________________________________________________
>
> The errors:
>
> _______________________________________________________________
> 2 error LNK1120: 1 unresolved externals
> 1 error LNK2019: unresolved external symbol
> "__declspec(dllimport) void __cdecl ConsoleWrite (void)"
> (__imp_?ConsoleWrite at myclass@@SAXXZ) referenced in function
> _wmain
> _______________________________________________________________
If you're wanting to use the names (e.g. "ConsoleWrite") as is on
the C++ side them you need to declare them extern(C++) ( or
extern(C)) on the D side. if you were to run whatever the
equivalent of "nm my.dll | grep Console" on windows on the dll
then you'd see the two symbols with a different name (i.e. not
__imp_?ConsoleWrite at myclass@@SAXXZ).
More information about the Digitalmars-d-learn
mailing list