c++一个字符是一个字节,c#是用两个字节表示一个字符.我用c++写了一个dll,返回一个字符如下:
extern "C"
char _stdcall myDll()
{
char c = 'c';
return c;
}在C#中用
[DllImport ("myTest.dll"]
public static extern char myDll();
然后,
char myChar = myDll();方法虽说可以取得返回值,可是却占用两个字节.能否在c#只占用一个字节呢?急!!!!

解决方案 »

  1.   

    COM Interop可以使用现存的COM组件而不要求对原始组件进行修改。当一个 .NET 框架开发人员想将COM代码合并到一个管理应用程序中时,就可以用COM Interop功能引入相关的COM类型。引入之后,这个COM类型就可以使用了。这属于前期连接。但是有时候你需要对象的后期连接,这在.NET中也能实现,使用名称空间映射就可以通过后期连接来调用COM对象。
      

  2.   

    前期连接的话你就需要使用COM对象的RCW(RunTime Callable Wraper:运行时间的可调用包)来完成下面的命令行程序tblimp所完成的任务: ex. c:> tblimp /out:
      

  3.   

    c中的char对应C#中的byte/sbyte类型
    如果非要在C#中用char的话完全可以,一个字节扩充到两个字节不会有任何损失的
      

  4.   

    使用com将会很麻烦——把一个普通的dll作成com的。
    楼主的方法是正确的方法。
      

  5.   

    [DllImport ("myTest.dll"]
    public static extern byte myDll();
      

  6.   

    [DllImport("myTest.dll",EntryPoint="myDll")]
    public static extern byte myDll();这样做不行吗?
      

  7.   

    在C#将byte/sbyte再转过来好了,这种方法比较简便~
      

  8.   

    如果两个字节的也可以接受,当然DllImport简便,但COM封装的可以满足只占用一个字节的需求。