求救vb与vc程序间通信

fengk20 2007-11-21 12:24:34
怎么样VB向VC发送数据,我用SENGMESSAGE 发数据与VC成功,可是sendmessage数据类型是长整形,VC怎么接受一个文件名呀
有没有这方面的例程??
我看zhmjz(我可是个大-天-才) 这个问题与我差不多 能不能教我这么做呀??能发送,可vc怎么接受那文件名呀??
急求!!!!!
Dim hvcfile As Long
Dim CD As COPYDATASTRUCT
Dim sfile As String
hvcfile = FindWindow(vbNullString, "Control the CAM350") '发送到"control the cam350"这个VC运行程序
sfile = "e:\ouyang\GERBER\GBX\MA009S0707001.GBX"
CD.dwData = Len(sfile)
CD.lpData = StrPtr(sfile)
If hvcfile <> 0 Then
hvcfile = SendMessage(hvcfile, WM_COPYDATA, 0, VarPtr(CD))
MsgBox ("sendmessage OK")
Else
MsgBox ("error!sendmessage fail!")
End If
End Sub
...全文
136 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengk20 2007-11-23
  • 打赏
  • 举报
回复
谢谢了!!不过还有点小问题。是我指针用错了
tianhuo_soft 2007-11-21
  • 打赏
  • 举报
回复
注意在VC中int是4个字节(相当于VB的Long),而VB的Integer只有2个字节。必须保证VB和VC的参数个数相同,所占字节数也一致。最后一个要注意的问题是VC中绝对不能出现数组越界的情况,否则会导致VB程序崩溃。
tianhuo_soft 2007-11-21
  • 打赏
  • 举报
回复
VC int 对象VB 的 long
tanchuhan 2007-11-21
  • 打赏
  • 举报
回复
不知道在哪里上传源代码,不过贴主要代码出来也足够了(注意VB中的字符串是UNICODE)

vb:
Option Explicit

Private Const WM_COPYDATA = &H4A

Private Type COPYDATASTRUCT
dwData As Long
cbData As Long
lpData As Long
End Type

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Private Sub Command1_Click()
Dim hwndRecv As Long
hwndRecv = FindWindow("RECVSTRING", "RecvString")

If hwndRecv = 0 Then
MsgBox "你还没启动VC方程序接收字符串", vbInformation, "vb:发送字符串"
Exit Sub
End If

Dim sText As String
Dim cds As COPYDATASTRUCT
sText = Text1.Text
cds.cbData = LenB(sText)
cds.lpData = StrPtr(sText)
Call SendMessage(hwndRecv, WM_COPYDATA, 0, cds)
MsgBox "字符串已经发送出去"
End Sub


vc:
	case WM_COPYDATA:
{
PCOPYDATASTRUCT pcd = (PCOPYDATASTRUCT)lParam;

int cch = (pcd->cbData / sizeof(WCHAR));
PWSTR pszRecv = new WCHAR[cch + 1];
memcpy(pszRecv, pcd->lpData, pcd->cbData);
pszRecv[cch] = L'\0';

MessageBoxW(hWnd, pszRecv, L"vc:接收字符串", MB_OK);

delete [] pszRecv;
return TRUE;
}
tanchuhan 2007-11-21
  • 打赏
  • 举报
回复
你贴你的SendMessage的声明出来先。
fengk20 2007-11-21
  • 打赏
  • 举报
回复
都没用呀 ,,怎么获得那文件名,字符串形式;这里都是长整型啊!! 怎么得到我想要的结果啊??帮帮我!我在线等你回答
tanchuhan 2007-11-21
  • 打赏
  • 举报
回复
晕,memcpy()的第一个参数和第二个参数反了吧?
fengk20 2007-11-21
  • 打赏
  • 举报
回复
VC中接受信息:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch message:
case WM_COPYDATA:
..................................//??这里该怎么写获得上面那程序传过来的文件名,把它赋予一变量
//COPYDATASTRUCT CD;
// memcpy(lParam,CD,sizeof(struct tagCOPYDATASTRUCT));

break;
大虾们,还望指点.很急!! 麻烦了

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧