我在Vc++中是这样写的:
void __stdcall  DllFun(char* name,char* ver){
         char name[]="abc";         char ver1[]="V1.0";         name=name;         ver=ver1;}在VB中此函数声明后,进行调用,是这样写的:
sub a()
    dim name as string
    dim ver as string    call dllfun(name,ver)
    label1.caption=name & ver   'end sub
调用发生错误,提示“bad dll calling convention.”:
请问,各位问题出在哪里了?请指正!!!!!!
多谢,多谢!

解决方案 »

  1.   

    name=name;这个比较寒改一下不知道好用不没有VBvoid __stdcall  DllFun(char*& refname,char*& refver)
    {
             char name[]="abc";         char ver1[]="V1.0";         refname=name;         refver=ver1;}
      

  2.   

    void __stdcall  DllFun(char* name,char* ver){
         AFX_MANAGE_STATE(AfxGetStaticModuleState());
             char name[]="abc";         char ver1[]="V1.0";         name=name;         ver=ver1;}
      

  3.   

    改成 void __declspec(dllexport) DllFun(char* name,char* ver)
    试试看。
      

  4.   

    VC++写的规则DLL,就是那种格式。
      

  5.   

    AFX_MANAGE_STATE(AfxGetStaticModuleState());是MFC DLL才需要的。
      

  6.   

    to syy64(太平洋):我按照您的写法试了一试,但是问题还是没有解决,存在两大问题,我把我的问题做一下详细说明:第一个问题:在vc中是这样写的:
    void __stdcall DLLVer(char* dllname,char* ver)
    {
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    char name[]="abc";
    char dllver[]="V1.0"; dllname=name;
    ver=dllver;
    }
    在vb中调用此函数,目的为把dllname与ver的字符串显示在vb的窗口中,
    vb中是这样写的:
    Public Declare Sub DLLVer Lib "Test.dll" (ByRef dllname As String, ByRef ver As String)Private Sub btnInfo_Click()
        Dim dllname As String
        Dim ver As String    DLLVer dllname, ver
        lable.Caption = dllname & ver
       
    End Sub
    问题却出现了,1)在vc中调试,没有报错,只是在vb 编写的窗口中得到的dllname与ver的字符串为空,无法的到他们的值;2)而在vb中调试调用dll文件中的此函数,却报错,错误信息是这样的:“Bad Dll calling convention!”这是怎麽回事?
    第二个大问题:出现第一个问题后,我在vc中换了另一种写法:
    void __stdcall DLLVer(char* dllname,char* ver)
    {
    int i=0;
    int len=0; AFX_MANAGE_STATE(AfxGetStaticModuleState()); char name[]="abc";
    char dllver[]="V1.0"; len=strlen(name);
    for (i=0;i<len;i++)
    {
    dllname[i]=name[i];
    }
    len=strlen(dllver);
    for(i=0;i<len;i++)
    {
    ver[i]=dllver[i];
    }}
    在vc中调试,却出现了另一个错误信息:‘unhandled exception in Test.exe:0xC0000005:Access violocation!’
    出现这样的问题是不是没有给指针变量分配内存空间,如果是,该如何写分配内存空间的代码?
    我遇到以上两大问题,真的是很郁闷,请楼主指点一二!!!!!!!多谢,多谢!
      

  7.   

    声明调用方式为 __stdcall 
    字符串作为参数,用BSTR类型
      

  8.   

    TO iamknight(侠客) :    能不能说的具体一些,应该如何写?谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢!!!!
      

  9.   

    1)好像是DLL调用约定错误,你确定vc代码中有void __declspec(dllexport) __stdcall 吗?2)还有vb中用“ByVal nSize As Long” 用ByVal声明你的参数。原因如下。如 果 DLL 过 程 需 要 一 个 LPSTR( 指 向 以 null 结 束 的 字 符 串 的 指 针) 作 为 参 数, 可 以 在VB 中 将 一 个 字 符 串 以 传 值 的 方 式 传 递 给 它。 因 为 指 向 BSTR 的 指 针 实 际 指 向 以 null 值 结 束 的 字 符 串 的 第 一 个 数 据 字 节, 所 以 对 于 DLL 过 程 来 说, 它 就 是 一 个 LPSTR。 这 样 传 入 动 态 连 接 库 的 字 符 串,DLL 过 程 也 可 以 对 它 进 行 修 改, 尽 管 它 是 以 传 值 方 式 传 入 的。 只 有 当DLL 过 程 需 要 一 个 指 向LPSTR 的 指 针 时, 才 以 传 址 的 方 式 传 入 字 符 串, 这 时DLL 过 程 得 到 的 是 一 个 指 向 字 符 串 指 针 的 指 针( 相 当 于C/C++ 中 的char * *), 而 不 是 通 常 所 用 的 字 符 串 的 首 地 址( 相 当 于C/C++ 中 的char *)。
      

  10.   

    1、第一种原因,正于楼上所说,对于数组,传指针可能有问题,一般在函数中都以aa[]的形式作为形参;
    2、AFX_MANAGE_STATE(AfxGetStaticModuleState());一定放在函数的最前头;
    3、你的DLL一定要是向导生成的规则DLL。
      

  11.   

    http://www.china-askpro.com/msg5/qa88.shtml
    这个可以给搂住你参考下.