このコードは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は顧客によって書かれているので、できるだけ簡単にする必要があります。