在C#中使用D DLL时出现BadImageFormatException

时间:2012-08-19 14:39:11

标签: c# dll d badimageformatexception

所以,作为一个实验,我决定尝试找出你是否可以在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)

任何人都可以了解正在发生的事情,以及我如何解决这个问题?

0 个答案:

没有答案