关于Delphi编写的DLL中String[255]作为参数在C#里调用接收时的问题
Delphi编写的DLL中String[255]作为参数在C#里调用接收时应该对应何种数据类型接受啊?
我用[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 255)] public string RecType;可以正确分配到空间 函数调用也显示成功 却返回乱码或空值请问正确该怎么做?

解决方案 »

  1.   

    自己顶一个 有DELPHI高手指点下 DELPHI里STRING 的底层知识吗 有人说STRING 不能用于DLL 那string[255]呢?
      

  2.   

    string[255]应该可以,用String的话如果导出就要用上ShareMem还要带上一个Dll这个Delphi里有说明
    据说Delphi写的Dll用其他非Delphi写的程序来调用很容易出错,因为Delphi 在编译时作了某些处理
      

  3.   

    那,就改成PChar呀。
    Delphi中Dll一般不用String,而用PChar。
    C中PChar,好象类似是字符的数组。
    另,Delphi中,也可以使用String的。最新发现!http://community.csdn.net/Expert/topic/4960/4960982.xml?temp=.3579981
    原来Dll是可以传递String的。意外发现!
      

  4.   

    DLL 封装好的啊  我没法改  只有在C#调用的时候转换
      

  5.   

    TO: zhaoyu_me() ( ) 信誉:105  2006-8-19 12:25:32  得分: 0  
        
    string[255]应该可以,用String的话如果导出就要用上ShareMem还要带上一个Dll这个Delphi里有说明
    据说Delphi写的Dll用其他非Delphi写的程序来调用很容易出错,因为Delphi 在编译时作了某些处理老兄 说说在C#里怎么使用ShareMem啊   具体怎么做?  
     
      

  6.   

    还是是pchar比较好,如果用shareMem只能在delphi调用delph写的dll时才可以用,其他语言调用则会出错.pchar的一些简单应用还是不难的.
    比如要将一个string转换为pchar,可能这么写:pchar(str);
    但要注意在返回字符串建议以这种形式返回:
    返回值类型为:pchar
    比如说strret:string是你要返回的值,如下返回这个值:
      GetMem(result,Length(strret)+1);  //result为返回值
      StrPCopy(Result,strret);
    这样返回的话,就不会有任何问题.pchar与c语言中的char*的作用是一样的
      

  7.   

    没看清题目不好意思,
    给你一种思路:
    再把你的dll封装一次,把你的接口导出来再做成一个新的dll.
      

  8.   

    如果已经封装好了,那只能向楼上所说,再搞一个dll,在c#中调用了不过,这有意思吗?是什么功能非要在delphi中实现,去c#中调用呢?努力学习 oracle ebs 中
      

  9.   

    呵呵 DLL是前辈开发的 我是2次利用   不管怎么样 结帖是美德