小弟是新手,在C#中调用C++的DLL,C++接口原形为:Try(const unsigned int DestType,const std::string ID);调用方法如下: 
    [DllImport("DesktopAgent.dll", CharSet = CharSet.Ansi)]
    public static extern int Try(uint DestType, string ID);Main中调用:
    MessageBox.Show("测试:" + AgentSDK.AgentTryConsult(1,"1001").ToString());结果调试报错:未将对象引用设置到对象的实例。接口中的const std::string类型,在C#中应该怎么调用啊??

解决方案 »

  1.   

    const std::string
    对应string因该没错阿
      

  2.   

    小弟是新手,在C#中调用C++的DLL,C++接口原形为:Try(const unsigned int DestType,const std::string ID);调用方法如下: 
       public class test
    {
        ...
        [DllImport("DesktopAgent.dll", CharSet = CharSet.Ansi)]
        public static extern int Try(uint DestType, string ID);
    }Main中调用:
        MessageBox.Show("测试:" + test.Try(1,"1001").ToString());结果调试报错:未将对象引用设置到对象的实例。接口中的const std::string类型,在C#中应该怎么调用啊??
      

  3.   

    AgentSDK.AgentTryConsult
    你这个是怎么写的实现的?
    那个申明的Try在哪里调用的  贴代码
      

  4.   

    不好意思,以我后来回复的为准,代码就是这些,在test中定义try,在main函数中使用。谢谢了先~
      

  5.   

    std::string不是一个简单对象,是STL的string类...尝试StringBuilder,如果不行的话,建议建立中间托管C++程序,做为桥梁作用...
      

  6.   

    const std::string
    对应String而不是string,试试
      

  7.   

    似乎没错啊,郁闷了。 而且你的错误是说某个类对象没有实例化(没有new),是不是你其他地方的问题啊,跟DLL函数引用申明好像没关系.
      

  8.   

    问题解决了,谢谢大家。不过解决的方法比较消极...让他们把接口类型改成 char *了...
      

  9.   

    汗...早知道可以改接口...char* 是标准C字符串,可以转换为char[] 或者string...但std::string是STL的类,没法很轻松的转换...