作者MOODY2 (婆挪挂夫)
看板C_Sharp
标题[问题] C# 使用 C++ DLL 的问题
时间Fri Dec 18 01:14:36 2009
大家好
在下这几天有爬文,弄出一个执行到一半但会当掉的样本出来
麻烦大家监定一下是哪边出了错,谢谢。
※C++端的DLL函式是:
#define DLL_DEC_1_API __declspec(dllexport)
extern "C" DLL_DEC_1_API int __cdecl fnDLL_Dec_1 (int a, int b, int *&c);
主要的功能就是将c这个call by reference 的 sizeof(int)*3 的指标空间
依序存入{a, b, a+b}
有另外写一个C来测试是ok的。
※ C#端就头痛了:
我把程式PO上来请大家看看
namespace CS_Dec_1
{
public partial class Form1 : Form
{
public
int[] c = new int[3] {0, 0, 0};
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
CDllcaller.Program.fnDLL_Dec_1(1, 2, c);
}
}
}
namespace CDllcaller
{
class Program
{
[DllImport("DLL_Dec_1.dll")]
public static extern int fnDLL_Dec_1(int a, int b, int[] c);
}
}
嗯,就是跑到这边往上数12行的:CDllcaller.Program.fnDLL_Dec_1(1, 2, c);
系统就会跳出以下讯息 T_T
类型 'System.AccessViolationException' 的未处理例外状况发生於 CS_Dec_1.exe
其他资讯: 尝试读取或写入受保护的记忆体。这通常表示其他记忆体已损毁。
DLL用C++ call是完全没问题的,但究竟C#这边是哪里写错呢?
拜托了大家,希望看看笑笑後可以提点一下,谢谢。
( ̄▽ ̄#)﹏﹏
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.168.155.141
1F:→ remmurds:(int a, int b, ref int[] c) C#参数的部分改成这样试试 12/18 07:07
2F:推 welon:传int 小心在x64爆掉.....XD 12/19 03:19