我在 c++ 文件中有此代码,并编译为 dll。
#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 / assembly)
函数名称/类型是固定的,永远不会改变(想想 driver.dll 读写)
此 dll 由客户编写,因此应尽可能简单!