C#调用Delphi的DLL问题
请教一个困扰我三天的问题哦我现在想在C#中调用一个有Delphi写的DLL文件,它的调用说明文档是这样描述的:...
请教一个困扰我三天的问题哦我现在想在C#中调用一个有Delphi写的DLL文件,它的调用说明文档是这样描述的:
展开
2个回答
推荐于2016-05-07 · 知道合伙人数码行家
关注
展开全部
首先贴出我的测试代码:
delphi:(Delphi指针不太会,还请大神们指点)
unit Unit1;
interface
uses
SysUtils;
function SajetTransData(f_iCommandNo:Integer;f_pData,f_pLen:Pointer):Boolean;stdcall;
implementation
function SajetTransData(f_iCommandNo:Integer;f_pData,f_pLen:Pointer):Boolean;
var
str,strlen:string;
len:Integer;
pstr:PChar;
plen,i:Integer;
begin
Result:=False;
if f_iCommandNo=1 then
begin
str:='';
strlen:='';
while Char(f_pData^) <> #0 do
begin
str := str +string(Char(f_pData^));
inc(Integer(f_pData));
end;
while Char(f_pLen^) <> #0 do
begin
strlen := strlen +string(Char(f_pLen^));
inc(Integer(f_pLen));
end;
len:=StrToInt(strlen);
str:=#13+'原始字符串:'+str+#13+
'有效长度:'+IntToStr(len);
pstr:=PChar(str);
plen:=Length(str);
for i:=0 to plen do
begin
Char(f_pData^):=pstr[i];
inc(Integer(f_pData));
end;
Char(f_pData^):=#0;
end;
Result:=True;
end;
end.
C#代码
private void button2_Click(object sender, EventArgs e)
{
int f_iCommandNo;
StringBuilder f_pData=new StringBuilder(256);
StringBuilder f_pLen = new StringBuilder(256);
f_iCommandNo = 1;
f_pData.Append("123");
f_pData.Append("45");
int len = f_pData.Length;
f_pLen.Append(len.ToString());
CallDelphi.SajetTransData(f_iCommandNo,f_pData,f_pLen);
MessageBox.Show(f_pData.ToString());
}
private class CallDelphi
{
const string path = "CsharpTest.dll";
[DllImport(path, EntryPoint = "SajetTransData", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern Boolean SajetTransData(int f_iCommandNo, StringBuilder f_pData, StringBuilder f_pLen);
}
两个指针都用StringBuild去操作。f_pLen传入int型的即可。
测试结果(第一行为原数据,后面为delphi处理后在原指针上加的内容):
博客园也有该提问:http://q.cnblogs.com/q/53303/
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询