我需要用vc写一个dll,这个dll需要接受pb传进来的一个字符串,处理后,在传出一个字符串,小弟弄了很长时间,始终没有结果,请高手赐教,谢谢。

解决方案 »

  1.   

    PB没有用过但是应该注意DLL中的调用约定,因为这个涉及到分配的内存由谁释放。应该使用__stdcall
      

  2.   

    主要是我不知道传入和传出应该用什么类型的,我用的vc++ int oo(char *a,char b)a是传入的字符串,b是传出的字符串,我不知道这样写对不对阿。
      

  3.   

    需要注意函数调用约定,一般用__stdcall
    还要注意不同语言之间的类型转换
      

  4.   

    “我调用的时候传入两个字符串,提示类型不对啊”你后面那个char b 不是字符数组,只是个字符。不能传字符串吧!如楼上位高手所说,一定要注意用__stdcall。近来我一直在写VC的DLL用PB调用,愿意和你讨论一下!
      

  5.   

    LPVOID PASCAL getmtime(LPVOID pFileName)
    {  // char *a=pFileName;

    CString str;

        char *a,*buffer=new char[256];

    a=(char *)pFileName;
    //AfxMessageBox(a);
        if(file.Open(a,CFile::modeRead))
    file.GetStatus(a,status);
    else AfxMessageBox("error can't open file");

        str.Format("%02d年 %02d月 %02d日,%02d:%02d:%02d",status.m_mtime.GetYear(),status.m_mtime.GetMonth(),status.m_mtime.GetDay(),status.m_mtime.GetHour(),status.m_mtime.GetMinute(),status.m_mtime.GetSecond());
     for(int i=0;i<str.GetLength();i++)
     {buffer[i]=str.GetAt(i);
     }
    buffer[i]='\0';
     //AfxMessageBox(buffer);
        file.Close();
    return buffer;
       

    按这种形式吧,肯定没问题,传出也用LPVOID
      

  6.   

    要是传入和传出字符串,PB的声明里面要用ref.在VC中传出一个字符串:extern "C" BOOL PASCAL EXPORT GetSTR(LPTSTR  szOutStr, int nLen);PB里面首先声明为:
    boolean GetSTR(ref string szOutStr, int nLen) Library "example.dll"调用的时候要给你的字符串变量先分配一块内存,要不然程序会不稳定.
    如:
      string oStr
      oStr = space(500)
      GetSTR(ref oStr, 500)