用VC做的动态链接库
在delphi做的程序调用动态库的导出函数来获得一些状态数据,状态数据空间的申请由delphi完成,如下面的两种,
动态库获得状态数据后把这些状态数据放到这段缓冲中去,可是在动态库端的单步调试时,却发现这段申请的空间
禁止写,是不是用delphi动态申请的空间,在VC写的DLL中就不能用。我用下面两种方法分配空间:
第一种:
pBuf:Pchar;
iBufLen:=5000;
    GetMem(pBuf,iBufLen);
    pBuf:=#0第二种:
pBuf:Pchar;
iBufLen:=5000;
    Pchar:=AllocMem(iBufLen);
    pBuf:=#0;iReturn:=S_GetStatus(1,pBuf,iBufLen);   //S_GetStatus是动态库的导出函数,用来获得状态数据;

解决方案 »

  1.   

    在vc中对这个dll中进行单步调试时,发现delphi申请的这段pBuf空间传给dll用时,可读但是不可以写
      

  2.   

    stdcall; external 'serial.dll' name 'S_GetStatus';
      

  3.   

    这样吧 你在VC中是如何使用这段内存空间的??
    因为你首地址的内容赋为0了 所以如果你在VC中用lstrlen(..)得到的就是0 那么当然就是不能写的
    我觉得你应该再穿一个buffer的长度进去 让dll明确的知道从这个首址开始 它可以安全的使用这些后面的空间
      

  4.   

    dll與 exe 中要共享內存, 應該用全局內存, 而不能用local的, 就我所知是這樣的
      

  5.   

    先 
    var hMem:HGLOBAL;
        lpBuf: Pointer;
     
    hMem = GlobalAlloc(GHND   GMEM_SHARE, sizeof(g_str)); 
    然后  lpBuf = GlobalUnlock(hMem);  // lpBuf就是lpvoid类型的
    你把这个lpBuf做为 pBuf传入即可
      

  6.   

    to: beyondtkl
    还是不行呀