首页新闻找找看学习计划

.net调用delphi组件 指针参数

0
悬赏园豆:20 [待解决问题]

delphi中:
函数定义:
function SeekCard(var CardType: Byte; CardSN: Pointer; var BufSize: Integer): Boolean; stdcall; external ERTransDLL;

函数调用:
var
  sn: array[0..16] of Char;
  nLen: Integer;
  aCardType: Byte;
begin
  if SeekCard(aCardType, @sn, nLen) then
    memo1.Lines.Add('寻卡成功 ' + sn+ ' 卡类型 '+ intToStr(aCardType))
  else memo1.Lines.Add('寻卡失败,错误代码 '+IntToStr(GetLastTradeError));
end;




转换到.net中:
        [DllImport(ERTransDLL, CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Winapi)]
        public static extern bool SeekCard(ref byte CardType, object CardSN, ref int BufSize);


        char[] sn = new char[16 + 1];
        static int nLen = 0;
        static byte aCardType = 0;
        private void btnConnectReader_Click(object sender, EventArgs e)
        {
            if (SeekCard(ref aCardType,sn, ref nLen))
            {
                tssMessage.Text = "寻卡成功 " + sn + " 卡类型 " + (aCardType).ToString();
            }


异常:{"尝试读取或写入受保护的内存。这通常指示其他内存已损坏。"}

会不是delphi中的 Pointer转换成object的问题,我也试过用intptr的,会出现栈溢出异常

$tommix的主页 $tommix | 初学一级 | 园豆:164
提问于:2013-07-15 21:06
< >
分享
所有回答(1)
0

 object CardSN 这样肯定不行。试试StringBuilder吧,估计也要加ref。好久没玩delphi转C#了,不确定啊。

数据酷软件 | 园豆:128 (初学一级) | 2013-07-16 20:39

stringbuilder,Intptr我都试过,不行的,不过现在已经解决了,我把项目从.net4转到3.5就OK了,究其原因不懂,有了解的朋友可以帮忙解释下原因

支持(0) 反对(0) $tommix | 园豆:164 (初学一级) | 2013-07-17 15:34
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册