You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

87 lines
2.1 KiB
Go

2 years ago
package main
import (
"fmt"
"go-dde/dde"
"go-dde/ddeml"
2 years ago
. "go-dde/types"
"time"
)
func DdeCallback(wType int, wFmt int, hConv uintptr, hsz1 uintptr, hsz2 uintptr, hData uintptr, dwData1 int64, dwData2 int64) int {
switch wType {
case XTYP_CONNECT:
//接受客户端链接;
return 0 //接受客户端链接
case XTYP_ADVSTART:
//客户端启动咨询循环。
return 0 //接受客户端链接
case XTYP_ADVREQ:
//广播数据;
case XTYP_REQUEST:
//数据请求;
case XTYP_POKE:
//接受客户端发送的数据;
default:
return 0
}
return 0
}
var callbacks FNCALLBACK = func(
Type UINT,
Fmt UINT,
Conv HCONV,
Sz1 HSZ,
Sz2 HSZ,
Data HDDEDATA,
Data1 ULONG_PTR,
Data2 ULONG_PTR) HDDEDATA {
return 0
}
var idInst DWORD = 0
var szApp VString = "Server"
var szTopic VString = "MyTopic"
var items []VString = []VString{"MyItem0", "MyItem1", "MyItem2", "MyItem3", "MyItem4", "MyItem5", "MyItem6"}
var hszItem []HSZ = make([]HSZ, len(items))
func runClient() {
var cmd DWORD = DWORD(APPCLASS_STANDARD | APPCMD_CLIENTONLY)
var res DWORD = 0
iReturn := ddeml.DdeInitialize(&idInst, DdeCallback, cmd, res)
2 years ago
if iReturn != UINT(DMLERR_NO_ERROR) {
}
if int(iReturn) != DMLERR_NO_ERROR {
fmt.Printf("DDE Initialization Failed")
}
var hConv HCONV // 会话句柄
hszApp := ddeml.DdeCreateStringHandle(idInst, szApp, 0)
hszTopic := ddeml.DdeCreateStringHandle(idInst, szTopic, 0)
2 years ago
for i := 0; i < len(items); i++ {
hszItem[i] = ddeml.DdeCreateStringHandle(idInst, items[i], 0)
2 years ago
}
hConv = ddeml.DdeConnect(idInst, hszApp, hszTopic, nil)
ddeml.DdeFreeStringHandle(idInst, hszApp)
ddeml.DdeFreeStringHandle(idInst, hszTopic)
2 years ago
if hConv == 0 {
fmt.Printf("DDE Connection Failed.\n")
time.Sleep(2e9) //2e9 相当于2秒
ddeml.DdeUninitialize(idInst)
2 years ago
}
for i := 0; i < len(items); i++ {
data := dde.DDERequest(idInst, hConv, hszItem[i], "请求到服务端数据: ")
2 years ago
fmt.Printf("data: %v\n", data)
dde.DDEPoke(idInst, hConv, hszItem[i], data)
2 years ago
time.Sleep(1e9)
}
fmt.Printf("客户端关闭")
ddeml.DdeDisconnect(hConv)
ddeml.DdeUninitialize(idInst)
2 years ago
}
func main() {
runClient()
}