您的位置:首页 > 编程语言 > C#

c# 调用 dephi 字符串传输

2016-03-23 16:35 453 查看
先吐槽一下,网上很多文章的问题却没有一个详细的解决方案的,而且百度了一堆都是问题,哎;

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

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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: