c# 调用 dephi 字符串传输

先吐槽一下,网上很多文章的问题却没有一个详细的解决方案的,而且百度了一堆都是问题,哎;

下面就来看下我的解决方案吧,希望对你有用:

1.先说下方式:

采用 c# StringBuilder 对应 dephi 的 Pointer

2.误区点:

c# : [DllImport("Sign_AnySignInterface.dll", CharSet = CharSet.Ansi // 这个地方必须为:Ansi  不然会乱码,这个折腾了好久

dephi: function Sign_AnySignGetInfo_ex(nInfolx :Integer ;qmxh :PChar ;memo :PChar; strInfo :Pointer ):Boolean ;stdcall;   //  strInfo  前面一定不要加 var,加了就无法返回结果


说完这些还是上代码最直接:


c# :

//静态反射

 [DllImport("Sign_AnySignInterface.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall, EntryPoint = "Sign_AnySignVerifyData")]
   public static extern Boolean Sign_AnySignVerifyData(int qmxh, StringBuilder memo, StringBuilder strInfo);

//调用反射

        StringBuilder sbBuilder = new StringBuilder(1000000);
            bool bl = AnySignMethods.Sign_AnySignVerifyData(int.Parse(qmxh), new StringBuilder(memo), sbBuilder);
            strInfo = sbBuilder.ToString();


dephi:

定义:

function Sign_AnySignVerifyData(qmxh :Integer ;memo :PChar; strInfo :Pointer  ):Boolean ;stdcall;


方法:

function Sign_AnySignVerifyData(qmxh :Integer ;memo :PChar; strInfo :Pointer ):Boolean ;stdcall;
var

   b_ret :Boolean ;
   strLog :string ;
   strmeno:WideString;
   strInfo1:WideString;
   str,strlen:string;
   pstr:PChar;
   plen,i:Integer;
begin
    Result :=False ;
     while Char(strInfo^) <> #0 do
    begin
      str := str +string(Char(strInfo^));
      inc(Integer(strInfo));
    end;
    

      str := ‘你的字符串’;
        pstr:=PChar(str);
     plen:=Length(str);
      for i:=0 to plen do
    begin
      Char(strInfo^):=pstr[i];
      inc(Integer(strInfo));
    end;
    Char(strInfo^):=#0;
    
    Result :=True ;
end;


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值