在 DLL 中:LPTSR m_lpszBuf = NULL;
{
    // ...
    // 对 m_lpszBuf 进行操作
    // ...
}const LPCTSTR __declspec(dllexport) WINAPI getStr( ..., SIZE_T * const pStrLen = NULL )
{
    // ...
    // 对 m_lpszBuf 进行操作
    // ...
    if ( NULL != pStrLen )
    {
        *pStrLen = strlen( m_lpszBuf );
    }
    return m_lpszBuf;
}其中,m_lpszBuf 是一个以"\0"结尾的字串,其长度不定(由其它函数决定),
getStr() 函数的目的是为了获取该字串的首地址(也可得到该字串的长度)我用C写该DLL的目的,是希望在其它语言如VB也可自由调用它。请问在VB中,如何申明该函数?如何让VB读出该字串?
如果当前接口无法完成,应该怎样修改 DLL 的导出接口?

解决方案 »

  1.   

    // ¶ÁÈ¡Êý¾Ý¡£ 2004.5.26.
    extern "C" __declspec(dllexport) bool ReadDXD(char* strFileName, LPDXD pdxd)
    {
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    int i, j, num, lRowDem, lColDem;
    LPDXD pdxdtemp;
    FILE* fp1=NULL; fp1 = fopen(strFileName, "rb");
    if(fp1==NULL)return false;
    fread(&lRowDem, sizeof(int), 1, fp1);
    fread(&lColDem, sizeof(int), 1, fp1);
    num = lRowDem*lColDem;
    pdxd = (LPDXD)new DXD[num];
    pdxdtemp = pdxd;
    for(i=0;i<lRowDem;i++)
    {
    for(j=0;j<lColDem;j++)
    {
    fread(pdxdtemp, sizeof(DXD), 1, fp1);
    pdxdtemp++;
    }
    }
    fclose(fp1);
    return true;
    }
    写成如上形式。
      

  2.   

    不明白,难道是打算通过文件传递数据?我的问题是:DLL return 回一个字串首地址,如果用VC去调用非常容易,但如果是VB调用,能否成功?
      

  3.   

    难道不可以 return 一个指针吗?特别是字串指针?
      

  4.   

    我已巧妙地解决了该问题。
    解决方法是制作了一个 TLB 文件给 VB 使用。
    参考代码:http://maths.diy.myrice.com/download/HugeCalcV6000b.rar (1.48 MB)现在提个新问题:哪些编程语言支持 TLB 接口文件?
      

  5.   

    你应该返回一个bstr的数据结构
      

  6.   

    我的 DLL 是为了尽可能多的编程语言服务,不仅仅是 VB.
    通过 WINAPI 可以巧妙的解决 VB 对不定长字串的操作,且可以做到直接写屏,所以非常高效。
    在我提供的压缩包中有详细的源代码,并在 HugeCalc.chm 中附有详尽的说明。现在我的问题是:C#、CB、Delphi、Fortran、PB、VFP 等语言是否支持 TLB 接口文件?
      

  7.   

    HugeCalc V6.0.0.0 正式发布!谢谢以上各位的帮助!