在C#和DLL(双向)之间传递数组数据
||
我有一些可以编译为DLL的C代码。从C#中,我需要将一个整数数组传递给它,并且需要从中获取一个整数数组。
这是我到目前为止的内容。在C#中,唯一起作用的函数是bar()。它返回22并按预期写入文件。其他人正确地写入他们的文件,但是在将控制权交还给C#时抛出异常。读着
\“对PInvoke函数的调用'irhax!irhax.App :: foo \'使堆栈不平衡。这可能是因为托管的PInvoke签名与非托管的目标签名不匹配。请检查PInvoke的调用约定和参数签名与目标非托管签名匹配。\“
C(DLL):
#define IG_API __declspec(dllexport)
IG_API void foo(int i) {
FILE *f = fopen(\"foo.txt\", \"a+\");
fprintf(f, \"%d\\n\", i);
fclose(f);
}
IG_API int bar(void) {
FILE *f = fopen(\"bar.txt\", \"a+\");
fprintf(f, \"bar!\\n\");
fclose(f);
return 22;
}
IG_API void transmitIR(unsigned *data, int length) {
FILE *f = fopen(\"transmit.txt\", \"a+\");
for(int i = 0; i < length; ++i)
fprintf(f, \"%d, \", data[i]);
fprintf(f, \"\\n\");
fclose(f);
}
IG_API int receiveIR(unsigned *data, int length) {
for(int i = 0; i < length; ++i)
data[i] = 4;
return length;
}
C#(调用方):
[DllImport(\"Plugin.dll\")]
static extern void foo(int i);
[DllImport(\"Plugin.dll\")]
static extern int bar();
[DllImport(\"Plugin.dll\")]
static extern void transmitIR(uint[] data, int length);
[DllImport(\"Plugin.dll\")]
static extern int receiveIR(out uint[] data, int length);
我在这里不知所措。我究竟做错了什么?由于我什至无法使foo(int)正常工作,因此这似乎是一个不错的起点。
没有找到相关结果
已邀请:
2 个回复
磁辫覆氓
属性应为:
当然,您也可以使用
将C代码切换为stdcall。但是请确保只执行其中一项!
不需要
。您应该声明:
裸雷胜檀哭