怎样将 vc 中的一个字符串 传递到 vb 中???

解决方案 »

  1.   

    问题是我要发一个读文件的指令阿,不可能没隔一段时间就去读 在vc 中可以发一个自定义的消息
      HWND  hwnd = ::FindWindow(NULL,"testvb"); 
    if(hwnd == NULL)
    return;
         CWnd *cwnd = FromHandle(hwnd);
    if(cwnd == NULL)
    return;
         cwnd->PostMessage(WM_MYMSG);
     但我在vb 中怎么接受这个消息? 请指教???
      

  2.   

    在 vb 中我用,
    1。
    Private Sub Form_Load()
    gHW = Me.hwnd ' 保存窗体的句柄
    ' 下面是关键,完成两个工作:1、将我们自己的全局函数替换为新的窗体回调函数
    ' 2、保存原来的 VB 默认窗户口函数地址
    lpPrevWndProc = SetWindowLong(gHW, GWL_WNDPROC, AddressOf WindowProc)
    End Sub2。
    在模块中:
    Public Const WM_COPYDATA = &H4A
    Public Const WM_CLOSE = &H10Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As LongDim hwndWinamp As Long
    Public Const GWL_WNDPROC = -4
    Global lpPrevWndProc As Long
    Global gHW As Long' 这里是关键,我自定义了一个窗口函数(回调函数),以替代 VB 窗体自己的默认窗口函数。' 窗口函数是干什么的?它就是负责处理 Windows 发送给它的消息,并加以过滤,筛选出它感兴趣' 的消息,映射成为事件供我们使用。VB 中每个窗口都有一个默认的窗口函数,我们是看不到的。' 有很多消息都被 VB 的默认窗口函数过滤掉了。了解 C/C++/Delphi 程序设计的朋友应该知道这些。
    Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    ' 我们也进行消息过滤,不过我们指拦截我们感兴趣的消息
    ' 其他消息我们懒得处理,交给 VB 默认的窗口函数去处理吧。
    Debug.Print ("dd==" & uMsg)
    Select Case uMsg
        Case &H4A 'WM_COPYDATA = &H4A 消息
    MsgBox ("dd")
    End Select
    ' 这里又是关键,因为其他我们不关心的消息我们自己不处理,所以必须由 VB 的默认处理函数处理
    ' lpPrevWndProc 其实就是一个函数指针,它指向 VB 默认窗口函数
    WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, wParam, lParam)
    End Function
    =========================================================
    在vc 中:
    HWND  hwnd = ::FindWindow("ThunderFormDC","Form1"); 
    if(hwnd == NULL)
    return;
    ::SendMessage(hwnd, WM_COPYDATA,0,0);//如果传WM_CLOSE 可以关掉vb 程序我到底错在那里,请指教????
      

  3.   

    邦德老兄,我没有仔细看你的程序,我用 Visual C++写的控件在 vb里用时字符串是需要转化的,跟这段程序差不多
     CString str = "UpdateControl";
     BSTR bstr = str.AllocSysString();
    消息传递我想需要RegisterWindowMessage
      

  4.   

    上面的大侠,可以说清楚点吗?
    WM_COPYDATA 是系统消息,还需要RegisterWindowMessage 注册吗?“用 Visual C++写的控件” 必须是 dll 文件吗? 
      

  5.   

    现在 确定 用 WM_COPYDATA 该怎么办?我只需传一个字符串和读的指令就行了
      

  6.   

    用专门的api函数可以
    BSTR SysAllocSring("hello world"L);
      

  7.   

    first define an array in VB
    Dim sText As String
    ' Allocate string buffer
    sText = String$(256, vbNullChar)then pass the array pointer to VCextern "C" long FAR PASCAL EXPORT GetVCStrign (char* vbmem) 

    strcpy(vbmem, "I just got passed!") 
    rturn 0; 
    }