我有一個在VS 6.0中開發的非託管C++ MFC dll。我想在我的C#應用程序中使用它。我正在嘗試使用PInvoke。從C#調用非託管C++ VS 6.0 MFC dll
這裏是C++代碼:
// testDll.cpp : Defines the entry point for the DLL application.
//
#include "stdafx.h"
extern "C" {
BOOL APIENTRY DllMain(HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
__declspec(dllexport) int test(int a)
{
return a * a;
}
}
這裏是如何我試圖調用從C#方法「測試」:
// PInvokeTest.cs
using System;
using System.Runtime.InteropServices;
class PlatformInvokeTest
{
[DllImport("TestDll.dll")]
internal static extern int test(int number);
public static void Main()
{
Console.WriteLine(test(5));
}
}
當我設置這種方式工作得很好C++的DLL只是一個普通的Win32 DLL。
但是,一旦我更改項目類型MFC(「使用MFC中共享DLL」)我得到這個錯誤:
未處理的異常:System.DllNotFoundException:無法加載DLL「TestDll.dll ': 指定的模塊無法找到。 (異常來自HRESULT:0x8007007E) at PlatformInvokeTest.test(Int32號碼)
謝謝!
它的工作原理!非常感謝!依賴沃克正是我所需要的。 TestDll.dll有一個相關的DLL - MSVCRTD.DLL。在將此dll複製到項目文件夾後,C#應用程序運行得很好。 – 2009-12-16 21:05:10
這意味着您對C++運行時具有依賴性。 MSVCRTD是運行時的調試版本。確保使用您的發行版本來重新分發非調試dll。 – 2009-12-17 20:38:28