求一个DLL接口写法,万分感谢
第一次搞第三方DLL接口程序,很多地方不太会,求教,我的代码如下:
[DllImport("TPBroker.dll", EntryPoint = "RTPC", CharSet = CharSet.Ansi)]
public static extern int RTPC(int TPID, Char[] AuthorizedCode, Char[] RequestCode, Char[] RequestParams, ref Char[] ResponseCode, ref int[] ResponseBufLen, ref Char[] ResponseParams);
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
char[] AuthorizedCode1 = "{[1106]|[SYSTEM]|[0]}".ToArray();
char[] RequestCode1 = "{[0000]}".ToArray();
char[] RequestParams1 = "{[2]}".ToArray();
char[] ResponseCode1 = "{[]}".ToArray();
int [] ResponseBufLen1 = {100};
char[] ResponseParams1 = "{[]}".ToArray();
try
{
textBox1.Text = RTPC(21, AuthorizedCode1, RequestCode1, RequestParams1, ref (ResponseCode1), ref (ResponseBufLen1), ref(ResponseParams1)).ToString();
System.Text.StringBuilder sb1 = new System.Text.StringBuilder();
sb1.Append(ResponseCode1);
System.Text.StringBuilder sb2 = new System.Text.StringBuilder();
sb2.Append(ResponseBufLen1);
System.Text.StringBuilder sb3 = new System.Text.StringBuilder();
sb3.Append(ResponseParams1);
textBox2.Text = sb1.ToString();
textBox3.Text = sb2.ToString();
textBox4.Text = sb3.ToString();
}
catch (Exception ex)
{
MessageBox.Show(""+ex+"", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
点击后程序报错:
运行时遇到了错误。此错误的地址为 0x791c7b88,在线程 0x1194 上。错误代码为 0xc0000005。此错误可能是 CLR 中的 bug,或者是用户代码的不安全部分或不可验证部分中的 bug。此 bug 的常见来源包括用户对 COM-interop 或 PInvoke 的封送处理错误,这些错误可能会损坏堆栈
引发类型为“
System.ExecutionEngineException”的异常
------解决方案--------------------
把你的第三方DLL的头文件贴出来,你的RTPC函数对于错误,在C#里面那么写100%错的,至少错误有2大类,第一是对数组绝对不能用ref关键字,传入的数组不论长度是多少,传出就变为长度为1的数组了;第二是C#的Char是2个字节,而C++或Delphi的本地语言中的Char都是单字节,长度不一样,所以从来不在接口函数的声明中用Char的。
------解决方案--------------------
这要看你的dll原型,如果原型中都是诸如 int* 之类的,可以直接传递 int[],别加ref试试