extern "C" char* __stdcall GetSub(LPCSTR sFile)
{
char *rtnStr[80];
k=0;
for(i=0;i<11;i++)
{
for(j=0;j<9;j++)
{
rtnStr[k]=k;
k=k+1;
}
}
return *rtnStr;
         //问题出现在这里!返回的*trnStr仅仅是指针地址。不含内容,如何把内容告诉VB?

解决方案 »

  1.   

    在函数接口处
    让使用者传一个字符串进来
    extern "C" char* __stdcall GetSub(LPCSTR sFile, char* szGet);
      

  2.   

    EXTERN_C BSTR  __stdcall GetSub(LPCSTR sFile)
    {
    int GetCode[10][8];
    char *rtnStr="AAAA";
            char *str1="BBBB";
    strcpy(rtnStr,str1);
    return SysAllocString((BSTR)rtnStr);
    }
    给VB调用会出错,去掉:
            char *str1="BBBB";
        strcpy(rtnStr,str1);
    正常返回AAAA。
    请问问题出在哪里???
      

  3.   

    上面的人不是说过了,使用参数来传递,可以参考下面写法。
    其中,szBuffer是从VB传来的缓冲,结果字符串就会赋值这里面,
    lbufferSize是szBuffer的大小,在DLL中需要判断缓冲大小是否足够放置字符串。long __stdcall GetSub(const char* szFile, char* szBuffer, long lbufferSize)
    {
        char* aaa = "Test String";    if (strlen(aaa) >= lbufferSize)
            return FALSE;    strcpy(szBuffer, aaa);
        return TRUE;
    }在VB可以使用类似下面的方面调用。Dim strBuffer as String * 256
    long lngResult = GetSub("xxxxx", strBuffer, 256);