在VC中写一个简单的函数(DLL):
VBDLL_API int SayHello(const char *pMessage,char *pReturn,int inNum, int *outNum)
{
if ( inNum > 0 )
*outNum = inNum;
else
*outNum = 0 - inNum;
strcpy(pReturn,"This is a Return String");
::MessageBox(NULL,pMessage,"This is In String",MB_OK|MB_ICONSTOP);
return 100;
}在VB中该如何调用它呀?还有,如果参数是指针、地址,自定义类型,又该如何在VB中与之对应?
在C中定义的常量,在VB中该如何应用呢?实在是不懂VB,一直用VC。现在项目需要我在别人写的VB界面下加一些功能,这些功能我用VC都写好了,可是不会VB,郁闷呀!

解决方案 »

  1.   

    在VB里面选择工程--部件/引用,然后导入编译好的DLL就可以了
    所有的一切都是VB自动完成转换工作
      

  2.   

    j2eexin(I理想):
       操作时,提示信息如下:can't add a reference to the specialed file.当然,我用 browse按钮选择的是我编译好的DLL.
      

  3.   

    就像API一样声明即可。
    不过VC写的dll最后在DEF声明函数地址
    免得VB说找不到入口。
      

  4.   

    在VB的modules种先要声明所引用的函数啊,
    VC中extern "C" BOOL PASCAL EXPORT Handle( UINT nPortNumber )
    VB中Public Declare Function Handle Lib "YourDll.dll" (ByVal hwnd As Long) As Long
      

  5.   

    例:
    VBDLL_API int SayHello(const char *pMessage,char *pReturn,int inNum, int *outNum)
    {
    if ( inNum > 0 )
    *outNum = inNum;
    else
    *outNum = 0 - inNum;
    strcpy(pReturn,"This is a Return String");
    ::MessageBox(NULL,pMessage,"This is In String",MB_OK|MB_ICONSTOP);
    return 100;
    }VB中Public Declare Function fName Lib "DllName.dll"(byref Message() as byte,byref Result() as byte,byval inNum as long,byref outNum as long)as long
    调用时传入参数即可
      

  6.   

    《 VB与VC混合编程中处理消息的方法 》现在越来越多的人采用VB与VC的混合编程:用VB快速开发出漂亮的界面以及外围处理程序,再用VC编写底层的各种操作,例如内存的操作、IO端口的操作等,VC中还可以嵌入汇编语言进行更底层的操作。  一般的做法是将VC程序编译成DLL,在VB中用Declare语句声明DLL中的函数,例如:  Declare Function SendCommand Lib ″c:\program files\devstudio\wjfprojects\Hr0506dllMnsr\debug\Hr0506dllMnsr.dll″(CmdNum 
    As Integer) As Boolean  声明以后,函数SendCommand 就可以当作VB自己的函数使用了。  但是,怎样将VC中的各种消息(例如各种底层的状态)及时通知VB并且VB能够及时处理呢?这是VB的一个缺陷:不能方便地处理自定义的Windows消息。例如在VC中自定义了两条消息:MW_TAPI_DATACOME,MW_TAPI_BUSY,在C语言中,用PostMessage(hWnd,MW_TAPI_CONNECTED,0,0);语句可以很方便地将MW_TAPI_CONNECTED消息传递给窗体(窗体句柄为hWnd),在主回调函数中就可以处理了。但是要把这条消息传递给VB,并让VB处理这条消息,并不太容易。虽然在VB5.0以上的版本中,可以定义自己的事件(EVENT),但比较麻烦。这里介绍一种简单的方法,让VB巧妙地处理自定义的消息:  1.首先将VB窗体中TextBox控件Text1的句柄传递给DLL(注意:VB中的TextBox控件有hWnd属性)。  VB中: ′声明DLL中的函数  Declare Function SendhWnd Lib ″c:\program files\devstudio\wjfprojects\Hr0506dllMnsr\debug\ 
    Hr0506dllMnsr.dll″ ((ByVal hWnd As Long) As Boolean  ′传递text1的句柄  SendhWnd(text1.hWnd)  VC中://句柄接收函数   declspec(dllexport) BOOL GethWnd(HWND hWnd1)  { hWnd=hWnd1;  if (hWnd==NULL)  { return FALSE; }  return TRUE;}  2.在VC中用API函数SetWindowText取代PostMessage直接发送消息给VB中的Text1控件:  SetWindowText(hWnd,″ MW_TAPI_DATACOME ″);  3.在Text1_Change事件中处理消息:  Private Sub Text1_Change()  Select case Text1.text  case W_TAPI_DATACOME:  ′消息处理语句  case MW_TAPI_BUSY:  ′消息处理语句  default:  ′其他处理语句  End Select  End Sub  以上方法在作者编写的“TAPI远程监控系统”中使用,效果很好。(北京 吴俊峰)