开发过程是这样的
首先用pro/c++编写pc文件,然后通过pro/c转换为cpp文件
然后再将cpp在vc环境下面编译成dll
最后在c#下面调用这个dll
可是调用的时候出现问题了
VC的函数是用CHAR *作为参数写的
例如
extern "C" __declspec(dllexport) int con_t_ora(char *Ldb_name,char *Lusername,char  *Lpassword,char *remsg,char *errormsg)
{         ............. MessageBox(NULL,Ldb_name,"sss",MB_OK);
return 1;
}
而C#下面一般不提倡用指针的
我就使用了string作为传递参数
问题出现了
VC的DLL函数仅仅能接受第一个字符
也就是说
在C#下面调用并不是按照VC的方式调用的
C#下面取得首地址,并没有继续寻找地址
所以按照CHAR来处理的,而不是按照CHAR *处理的不知道如何解决这个问题
经过试验,如果两边都声明为INT类型,是可以相互传递的请高手赐教

解决方案 »

  1.   

    char*作为传入参数,在C#内使用string应该没有问题(也是传地址)
      

  2.   

    没有问题我就不要在这里提问了
    我不是很清楚在.net框架下
    是怎么调用DLL的
    能否有高手指点一下我也好知道如何解决
    找其他的方案
      

  3.   

    例如[DllImport("DrmDll.dll")]
    public static extern  string  Discovery(int p_intDelayTime);VC中是char * Discovery(int p_intDelayTime);你的代码
    con_t_ora(char *Ldb_name,char *Lusername,char  *Lpassword,char *remsg,char *errormsg)
    可以改为
    con_t_ora(string Ldb_name,string Lusername,string Lpassword,string remsg,string errormsg)
      

  4.   

    C++
    extern "C" NATIVEDLL_API void StringTest(char* str)
    {
    cout << str << endl;
    }C#
    [DllImport(testDllPath)]
    static extern void StringTest(string str);
    ...
    StringTest("已测试。");// 肯定是对的
      

  5.   

    NATIVEDLL_API 
    是什么意思?
      

  6.   

    #ifdef NATIVEDLL_EXPORTS
    #define NATIVEDLL_API __declspec(dllexport)
    #else
    #define NATIVEDLL_API __declspec(dllimport)
    #endif
      

  7.   

    string不行就用StringBuilderint con_t_ora(char *Ldb_name,char *Lusername,char  *Lpassword,char *remsg,char *errormsg)>>>[DllImport("????.dll")]
    static extern int con_t_ora(
    StringBuilder name, 
    StringBuilder username,
    StringBuilder password,
    StringBuilder remsg,
    StringBuilder errormsg)用的时候
    StringBuilder name = new StringBuilder(255);
         ……其他省略int result = con_t_ora(name ,username,password,remsg,errormsg);
      

  8.   

    楼上的都谢谢了
    尤其是Sunmast
    但是问题并不是你们描述的
    现在我已经解决
    由于在C#中无论是STRING还是STRINGBUILDER或者CHAR[]都是16位的
    而在VC中CHAR *是8位的
    所以我现在在C#下面是使用BYTE[]就可以正确的传输了这样也可以解释为什么
    传送回来的字符串
    会出现乱码了该问题已经完结
    谢谢楼上的同志