資源簡(jiǎn)介
這是我在用作調(diào)試DDE的一個(gè)程序,最開(kāi)始時(shí)出現(xiàn)與Excel通訊不穩(wěn)定的現(xiàn)象,這是最終穩(wěn)定后的程序,如果你正在做DDE,我覺(jué)得還是值得參考的。

代碼片段和文件信息
//?DDEClient.cpp?:?Defines?the?entry?point?for?the?console?application.
//
/*
示例?DDE?客戶端
下面的示例使用?Excel?工作簿或?Word?文檔的?DDE?主題。
對(duì)于?Excel,創(chuàng)建一個(gè)新的工作簿?(C:\Test.xls)?包含在單元格?A1?和?A2?中的數(shù)據(jù)。為?Word,創(chuàng)建新文檔?(C:\Test.doc)?包含文本。在文檔中文字的選擇一些,但不是所有,并創(chuàng)建一個(gè)名為?MyBookmark?在該位置的書簽。?
在?Visual?的?c?+?+?中創(chuàng)建新?Win32?控制臺(tái)應(yīng)用程序名為“DDEClient“。
在應(yīng)用程序向?qū)Вx擇?A?簡(jiǎn)單應(yīng)用程序,然后單擊?完成。
用下列替換代碼中?DDEClient.cpp:
??使用以下?Word,替換?main?函數(shù)中的前?7?行:?
????char?szApp[]?=?“WINWORD“;
????char?szTopic[]?=?“C:\\test.doc“;
????char?szCmd1[]?=?“[AppMinimize][EditGoTo?Destination:=\“\\EndofDoc\“][InsertPara]“;
????char?szItem1[]?=?“\\Doc“;??????char?szDesc1[]?=?“Document?contains:?\n“;
????char?szItem2[]?=?“MyBookmark“;?char?szDesc2[]?=?“MyBookmark?contains:?\n“;
????char?szItem3[]?=?“\\EndofDoc“;?char?szData3[]?=?“Data?from?DDE?Client“;
????char?szCmd2[]?=?“[FileSave][FileExit(2)]“;
生成,然后運(yùn)行該應(yīng)用程序。
使用?Excel,DDE?客戶端初始化?DDE?對(duì)話的工作簿文件?(C:\Test.xls)?使用的主題,并執(zhí)行下列操作:?
執(zhí)行?APP.MINIMIZE?的命令。
申請(qǐng)項(xiàng)目?R1C1?和?R2C1?中的數(shù)據(jù)。請(qǐng)注意,Excel?要求請(qǐng)求項(xiàng)必須以?R1C1?表示法。
pokes?R3C1?的數(shù)據(jù)。
在?$?粗體中的格式設(shè)置?R3C1、?保存了的工作簿并退出?Excel。
使用?Word,DDE?客戶端初始化?DDE?對(duì)話文檔文件?(C:\Test.doc)?使用的主題,并執(zhí)行下列操作:
執(zhí)行命令最大限度地減少應(yīng)用程序、?轉(zhuǎn)到文檔的結(jié)尾和插入一個(gè)新段落。
請(qǐng)求項(xiàng)“\Doc“檢索整個(gè)文檔的內(nèi)容。請(qǐng)注意該?\Doc?是預(yù)定義的書簽。
請(qǐng)求項(xiàng)以檢索該文本在書簽中的“MyBookmark“。
執(zhí)行命令來(lái)保存文檔并退出?Word。
*/
#include?“stdafx.h“
#include?“windows.h“
#include?“ddeml.h“
#include?“stdio.h“
HDDEDATA?CALLBACK?DdeCallback(
????UINT?uType?????//?Transaction?type.
????UINT?uFmt??????//?Clipboard?data?format.
????HCONV?hconv????//?Handle?to?the?conversation.
????HSZ?hsz1???????//?Handle?to?a?string.
????HSZ?hsz2???????//?Handle?to?a?string.
????HDDEDATA?hdata?//?Handle?to?a?global?memory?object.
????DWORD?dwData1??//?Transaction-specific?data.
????DWORD?dwData2)??//?Transaction-specific?data.
{
????return?0;
}
void?DDEExecute(DWORD?idInst?HCONV?hConv?char*?szCommand)
{
????HDDEDATA?hData?=?DdeCreateDataHandle(idInst?(LPBYTE)szCommand
???????????????????????????????lstrlen(szCommand)+1?0?NULL?CF_TEXT?0);
????if?(hData==NULL)???{
????????printf(“Command?failed:?%s\n“?szCommand);
????}
????else????{
????????DdeClientTransaction((LPBYTE)hData?0xFFFFFFFF?hConv?0L?0
?????????????????????????????XTYP_EXECUTE?TIMEOUT_ASYNC?NULL);
????}
}
void?DDERequest(DWORD?idInst?HCONV?hConv?char*?szItem?char*?sDesc)
{
????HSZ?hszItem?=?DdeCreateStringHandle(idInst?szItem?0);
????HDDEDATA?hData?=?DdeClientTransaction(NULL0hConvhszItemCF_TEXT?
?????????????????????????????????XTYP_REQUEST5000??NULL);
????if?(hData==NULL)
????{
????????printf(“Request?failed:?%s\n“?szItem);
????}
????else
????{
????????char?szResult[255];
????????DdeGetData(hData?(unsigned?char?*)szResult?255?0);
????????printf(“%s%s\n“?sDesc?szResult);
????}
}
void?DDEPoke(DWORD?idInst?HCONV?hConv?char*?szItem?char*?szData)
{
????HSZ?hszItem?=?DdeCreateStringHandle(idInst?szItem?0);
DdeClientTransaction((LPBYTE)szData?(DWORD)(lstrlen(szData)+1)
??????????????????????????hConv?hszItem
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件???????5548??2010-03-17?18:25??DDEClient(一個(gè)DDE和EXcel進(jìn)行通訊的例子)\DDEClient.cpp
?????文件???????4572??2010-03-17?15:05??DDEClient(一個(gè)DDE和EXcel進(jìn)行通訊的例子)\DDEClient.dsp
?????文件????????526??2010-03-17?15:05??DDEClient(一個(gè)DDE和EXcel進(jìn)行通訊的例子)\DDEClient.dsw
?????文件??????41984??2010-03-17?18:48??DDEClient(一個(gè)DDE和EXcel進(jìn)行通訊的例子)\DDEClient.ncb
?????文件??????48640??2010-03-17?18:48??DDEClient(一個(gè)DDE和EXcel進(jìn)行通訊的例子)\DDEClient.opt
?????文件???????1352??2010-03-17?18:25??DDEClient(一個(gè)DDE和EXcel進(jìn)行通訊的例子)\DDEClient.plg
?????文件?????172122??2010-03-17?18:25??DDEClient(一個(gè)DDE和EXcel進(jìn)行通訊的例子)\Debug\DDEClient.exe
?????文件?????196504??2010-03-17?18:25??DDEClient(一個(gè)DDE和EXcel進(jìn)行通訊的例子)\Debug\DDEClient.ilk
?????文件??????51314??2010-03-17?18:25??DDEClient(一個(gè)DDE和EXcel進(jìn)行通訊的例子)\Debug\DDEClient.obj
?????文件?????187056??2010-03-17?15:08??DDEClient(一個(gè)DDE和EXcel進(jìn)行通訊的例子)\Debug\DDEClient.pch
?????文件?????435200??2010-03-17?18:25??DDEClient(一個(gè)DDE和EXcel進(jìn)行通訊的例子)\Debug\DDEClient.pdb
?????文件???????1894??2010-03-17?15:08??DDEClient(一個(gè)DDE和EXcel進(jìn)行通訊的例子)\Debug\StdAfx.obj
?????文件?????132096??2010-03-17?18:25??DDEClient(一個(gè)DDE和EXcel進(jìn)行通訊的例子)\Debug\vc60.idb
?????文件?????233472??2010-03-17?18:25??DDEClient(一個(gè)DDE和EXcel進(jìn)行通訊的例子)\Debug\vc60.pdb
?????文件???????1226??2010-03-17?15:05??DDEClient(一個(gè)DDE和EXcel進(jìn)行通訊的例子)\ReadMe.txt
?????文件????????296??2010-03-17?15:05??DDEClient(一個(gè)DDE和EXcel進(jìn)行通訊的例子)\StdAfx.cpp
?????文件????????667??2010-03-17?15:05??DDEClient(一個(gè)DDE和EXcel進(jìn)行通訊的例子)\StdAfx.h
?????目錄??????????0??2010-03-17?18:25??DDEClient(一個(gè)DDE和EXcel進(jìn)行通訊的例子)\Debug
?????目錄??????????0??2010-03-17?18:48??DDEClient(一個(gè)DDE和EXcel進(jìn)行通訊的例子)
-----------?---------??----------?-----??----
??????????????1514469????????????????????19
評(píng)論
共有 條評(píng)論