我在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