所以,作为一个实验,我决定尝试找出你是否可以在C#中使用D DLL。我做了一些谷歌搜索,发现this线程。我在C#的第4篇文章中复制了(键入,而不是C& P)为类DString
提供的代码,并使用了来自here的DllMain()代码。
我的D代码:
// dllmain.d
import std.c.windows.windows;
import core.sys.windows.dll;
__gshared HINSTANCE g_hInst;
extern (Windows) {
BOOL DllMain(HINSTANCE hInstance, ULONG ulReason, LPVOID pvReserved) {
switch (ulReason)
{
case DLL_PROCESS_ATTACH:
g_hInst = hInstance;
dll_process_attach(hInstance, true);
break;
case DLL_PROCESS_DETACH:
dll_process_detach(hInstance, true);
break;
case DLL_THREAD_ATTACH:
dll_thread_attach(true, true);
break;
case DLL_THREAD_DETACH:
dll_thread_detach(true, true);
break;
}
return true;
}
}
我在C#中导入的实际功能:
// hello.d
module sbned;
import std.string;
export extern(C) {
ref string helloWorld() {
return "Hello World!"; }
}
像这样导入函数helloWorld():
[DllImport("sbned.dll")]
[return: MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef=typeof(DString))]
public static extern string helloWorld();
这一切都很好,没有来自D或C#编译器的错误,但每当我尝试运行程序(有或没有调试器)时它都会崩溃。使用调试器时,它给出了以下错误:
BadImageFormatException was unhandled
An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)
任何人都可以了解正在发生的事情,以及我如何解决这个问题?