现在规定VB的调用方法,VB调用不能改,求VC编制Dll的实现
DLL 返回一个字符串 例"中国"Public Declare Function GetIn Lib "TestIn" () As String
VB调用
Dim strZg As String
strZg=GetIn()
编制WIN32还是ATLDLL ,具体实代码

解决方案 »

  1.   

    http://dev.csdn.net/article/18/18548.shtm
      

  2.   

    extern "C" __declspec(dllexport) BSTR __stdcall GetIn()
    {
      return ::SysAllocString(OLESTR("返回串"));
    }
      

  3.   

    可以用返回一个用new分配的Unicode字符串的方法,不过最好还是由VB来分配字符串作为参数传给DLL,用来接收字符串。
      

  4.   

    使用DEF文件,并且使用API调用约定就可以了
      

  5.   

    extern "C" __declspec(dllexport) BSTR __stdcall GetIn()  
    {  
      return ::SysAllocString(OLESTR("返回串"));  
    } \这样函数名会被编译器加一些字符啊 
    建议用.def文件,并 _stdcall调用
      

  6.   


    Public Declare Function GetIn Lib "TestIn" () As String 
    VB调用 
    Dim strZg As String 
    strZg=GetIn() 
    ///////
    调用strZg=GetIn() 时出现,时而能显示正确的值,但有时会加上一些乱码,不知是什么原因!!!因为WIN32DLL不能用BSTR,所以用了chat*
    win32 DLL;extern "C" __declspec(dllexport) char* __stdcall GetIn();BOOL APIENTRY DllMain( HANDLE hModule, 
                           DWORD  ul_reason_for_call, 
                           LPVOID lpReserved
     )
    { switch( ul_reason_for_call )
    {
      case  DLL_PROCESS_ATTACH:
      break;      case  DLL_THREAD_ATTACH: 
      break;      case  DLL_THREAD_DETACH: 
      break;      case  DLL_PROCESS_DETACH:
      break;
        
    }
        return TRUE;
    }char* __stdcall GetIn()
    {
       char buffer[512];
       .....
       ......
       return buffer;
    }
      

  7.   

    VB的字符串都是UNICODE的,不能使用char*,改成WCHAR*试试。谁规定了win32dll不能使用BSTR的?
      

  8.   

    现在规定VB的调用方法,VB调用不能改,求VC编制Dll的实现 
    DLL 返回一个字符串 例"中国
    Public Declare Function GetIn Lib "TestIn" () As String 
    VB调用 
    Dim strZg As String 
    strZg=GetIn() 
    WIN32DLL 方式strZg值有时会出现乱码(或尾部有乱码式),ATLDLL显示strZg值的全是乱码
    请高手指教为什么会出这种情况ATLDLL;
    extern "C" __declspec(dllexport) BSTR __stdcall GetIn() 
    {
       char buffer[512];
       。。
       
       CString str=buffer;
       BSTR bstr=str.AllocSysString();
       return bstr;
         
    }WIN32 DLL;;;;;;//32dll 不能用BSTR 
    #include "stdafx.h"
    extern "C" __declspec(dllexport) char* __stdcall GetIn();BOOL APIENTRY DllMain( HANDLE hModule, 
                           DWORD  ul_reason_for_call, 
                           LPVOID lpReserved
     )
    { switch( ul_reason_for_call )
    {
      case  DLL_PROCESS_ATTACH:
      break;      case  DLL_THREAD_ATTACH: 
      break;      case  DLL_THREAD_DETACH: 
      break;      case  DLL_PROCESS_DETACH:
      break;
        
    }
        return TRUE;
    }char* __stdcall GetIn()
    {
       char buffer[512];
       。。
          return buffer;
    }
      

  9.   

    大家说说怎么改阿  char[]怎样转成WCHAR*阿
      

  10.   

    WCHAR* __stdcall GetIn() 

       WCHAR buffer[512]; 
       。。 
           return buffer; 
    }
      

  11.   

    但是前面一段只能返回char* 阿,是读一个函数返回值,
    前面只能定义char buffer[512]; 
      

  12.   

    就算buffer只能定义成char[],你不能转换?1. MultiByteToWideByte()
    2. USES_CONVERSION;
       return A2W(buffer);
      

  13.   

    就算buffer只能定义成char[],你不能转换?1. MultiByteToWideByte()
    2. USES_CONVERSION;
       return A2W(buffer);
      

  14.   


    /////http://wailingalone.blogbus.com/logs/8050111.html
    LPWSTR ConvertLPCSTRToLPWSTR (char* pCstring) { LPWSTR pszOut = NULL; if (pCstring != NULL) { int nInputStrLen = strlen (pCstring); // Double NULL Termination int nOutputStrLen = MultiByteToWideChar(CP_ACP, 0, pCstring, nInputStrLen, NULL, 0) + 2; pszOut = new WCHAR [nOutputStrLen]; if (pszOut) { memset (pszOut, 0x00, sizeof (WCHAR)*nOutputStrLen); MultiByteToWideChar (CP_ACP, 0, pCstring, nInputStrLen, pszOut, nInputStrLen); } } return pszOut; } 通过return ConvertLPCSTRToLPWSTR(buffer)后,VB调用报错
      

  15.   

    都说了要用BSTR,虽然它本质上也是UNICODE串,但是BSTR的内存管理是统一设计的。char buffer[512];
    ......
    CComBSTR bstr = buffer;
    return bstr.Detach();
      

  16.   

    还没解决?你这样试一下,给项目添加一个TestIn.def文件,文件中这样写:
    LIBRARY "TestIn"
    EXPORTS
        GetIn在TestIn.cpp中加入:
    LPWSTR __stdcall GetIn()
    {
        LPWSTR buffer = (LPWSTR)new WCHAR[3];
        wsccpy(buffer, L"中国");
        return buffer;
    }在VB中这样声明:
    Public Declare Unicode Function GetIn Lib "TestIn.dll" () As String
      

  17.   

     ATL DLL;搞定,谢谢jameshooo 
    return SysAllocString((BSTR)buffer);