在C#中,怎么传递Delphi生成的dll的string类型数据。

 我来答
renzhumin2
推荐于2017-09-30 · TA获得超过163个赞
知道小有建树答主
回答量:173
采纳率:0%
帮助的人:272万
展开全部
delphi创建DLL的时候,工程单元都会有个提示,意思就是,delphi的string类型是delphi自己定义的类型,不是广域的string,具体百度下《delphi中string与pchar的区别》
方法一:如果你确定要在DLL中使用string作为参数传递类型,必须在第一个引用中引用ShareMem单元(好象仅限delphi自己调用,以前我用C#调用的时候还是会老报错);
方法二:将string类型改为pchar、ShortString 。
一般delphi的DLL都是用pchar来替换string的。
Important note about DLL memory management: ShareMem must be the
first unit in your library's USES clause AND your project's (select
Project-View Source) USES clause if your DLL exports any procedures or
functions that pass strings as parameters or function results. This
applies to all strings passed to and from your DLL--even those that
are nested in records and classes. ShareMem is the interface unit to
the BORLNDMM.DLL shared memory manager, which must be deployed along
with your DLL. To avoid using BORLNDMM.DLL, pass string information
using PChar or ShortString parameters.
紫雪_梦幻
2012-10-27 · TA获得超过163个赞
知道答主
回答量:59
采纳率:0%
帮助的人:30.9万
展开全部
DELPHI里的是这样的:
function ArrayTst(strAry:Array of PChar):PChar;stdcall;
var
i:integer;
strAdd:string;
begin
strAdd:= ' ';
for i:=low(strAry) to High(strAry) do
begin
strAdd:=strAdd+strAry[i]
end;
Result:=PChar(strAdd);
end;

C#里是这样的:
声明:
[DllImport( "ArrayTest1.dll ", EntryPoint = "ArrayTst ", CharSet = CharSet.Ansi,CallingConvention=CallingConvention.StdCall)]
public extern static string ArrayTst(string[] ary);

调用:
string[] arytst=new string[]{ "a1 ", "b2 ", "c3 "};
TextBox1.Text=ArrayTst(arytst);
但报出System.NullReferenceException: 未将对象引用设置到对象的实例

参考资料: 百度

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式