从 C# 中的 DLL 运行代码时出错

标签: dll C#
发布时间: 2013/12/2 22:49:56
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我似乎不能过去的这一错误,所以我在想是否我什么也做错了我的呼叫代码或我的 DLL 中?

-错误-

$exception  {System.BadImageFormatException: The module was expected to contain an assembly manifest. (Exception from HRESULT: 0x80131018)

-调用代码-

 Assembly assembly = Assembly.LoadFile(@"C:\Users\Admin\Documents\Visual Studio 2012\Projects\MyDLL\Release\myDLL.dll");
            Type type = assembly.GetType("HelloWorld");
            var obj = Activator.CreateInstance(type);

            // Alternately you could get the MethodInfo for the TestRunner.Run method
            type.InvokeMember("HelloWorld",
                              BindingFlags.Default | BindingFlags.InvokeMethod,
                              null,
                              obj,
                              null);

-DLL 代码-

#include <Windows.h>

using namespace std;

extern "C" _declspec(dllexport) void __stdcall HelloWorld(LPSTR title, LPSTR msg)
{
   MessageBox( NULL, msg, title, MB_OK);
}

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}

解决方法 1:

Assembly.LoadFile可仅用于装载.NET 程序集,而你试图加载一个平原。DLL,您会需要使用 P/Invoke 从.NET 调用 dll 中的方法。尝试添加以下声明您您的类:

[DllImport("myDll.dll")]
static extern void HelloWorld(string title, string msg);

当您将任何其他.NET 方法,然后调用它。

赞助商