关于这个错误,我在网上也查看了一些帖子,说是, C#无法控制DLL的内存空间,当使用完毕后无法返回值
也有的说是 C#的String,相当于一个指针,而不能与C++的通用, 我也试验过 用C#的 StringBuilder,可是依然错误,不过错误不再是内存问题,好像是说接口问题
C#中
    [DllImport("SystemPro.dll", EntryPoint = "GetProcess",ExactSpelling = false)]
        public static extern int GetProcess(String compairValible);C++ 的DLLint GetProcess(string compairValible )
//这里返回的是 进程的PID
我试验过,如果我不给参数,而直接在DLL中定义进程的名字,例如 “QQ.exe"能正确返回进程的 PID,而已加入就返回错误。
请问,我应该如何修改,(请别用动态加载DLL的方法,我头晕,新手不懂,呵呵)谢谢

解决方案 »

  1.   

    c++的string不能直接对应c#的string,c++代码的string需要改为const char * 或者LPCTSTR:int GetProcess(LPCTSTR compairValible );
      

  2.   

    而且你如果用字符串传递参数的话,c#那边最好设置一下CharSet,因为c++在不同编译选项下对字符串有不同的编码方式,例如如果你的c++代码是用unicode编译的话,如下设置:[DllImport("SystemPro.dll", EntryPoint = "GetProcess",CharSet=CharSet.Unicode,ExactSpelling = false)]
            public static extern int GetProcess(String compairValible);
      

  3.   

    何止一个错啊。
    1 你的string是std::string吧。这你也用?
    2 字符集你考虑了么?没考虑读到也乱码。
    3 接string 用StringBuilder
    4 建议你直接 byte []接。那边c++ byte *传字节。这样至少你能调地起来,不会报错。至于你后面
       转的对不对,那还可以调试。
      

  4.   

    net有现成的Proccess类,楼主为何还有这么辛苦!?
      

  5.   

    您应该听说过 using namespace;所以我无需 std::
    起床 string 用 StringBuilder 用了,不可以,始终报错,我在最上面已经写过了,看全问题起码也是尊重你自己。
    乱码,我这么还没有到那个地步。。因为在我的DLL里面有处理的 方法4 这个建议我考虑过了没有太多必要,只是对DLl的一个练习
    !! 我是新人。。 但是感觉比你还多学过几年^.^