我在C++文件中編譯了該代碼,並將其編譯爲dll。如何在運行時在C#應用程序中加載Dll(C++)
#include "stdafx.h"
#include "WHUU.h"
#include "stdafx.h"
typedef int (__stdcall * Callback)(const int text);
static int x , y= 0;
Callback Handler = 0;
int getX()
{
return x;
}
void setX(int i)
{
x = i;
}
void setY(int i)
{
y = i;
}
int getY()
{
return y;
}
extern "C" __declspec(dllexport)
void __stdcall SetCallback(Callback handler) {
Handler = handler;
}
extern "C" __declspec(dllexport)
void __stdcall addX(int x) {
setX(x);
}
extern "C" __declspec(dllexport)
void __stdcall addY(int y) {
setY(y);
}
extern "C" __declspec(dllexport)
void __stdcall TestCallback() {
int z = getX() + getY();
int retval = Handler(z);
}
我的c#應用程序現在必須在運行時加載此dll。添加到回調並調用函數。我不想使用一個類。我可以加載類和
Type[] types = moduleAssembly.GetTypes();
但這個矯枉過正!另外C++不受管理。
我的意思是它很小! (是的,這只是一個例子,但「真實」和這個例子一樣大)。
我該怎麼做?
謝謝你的幫助!
地址:
我不喜歡的框架(如PInvoke的/組裝)
函數名稱/類型是固定的,不會改變(認爲driver.dll讀寫的)
這個DLL是由客戶編寫的,所以它應該儘可能的簡單!
http://www.pinvoke.net/ – deltree 2012-08-09 12:18:18
要求是相當荒謬的。沒有人要求最艱難的方式來做到這一點。你真的*想要利用pinvoke。要求客戶編寫這段代碼的COM版本,這樣你就不必再努力工作了,可能會變得很糟糕。 – 2012-08-09 12:43:24