using Ndde.Client;
....
..
DDEClient client = new DDEClient("view","Tagname");
client.Connect();
string Tag1 = client.Request("Tag1",1000).TrimEnd('\0');
string Tag1Comment = client.Request("Tag1.Comment",1000).TrimEnd('\0');
string Tag1DateTime = client.Request("Tag1.DateString",1000).TrimEnd('\0') + " " + client.Request("Tag1.TimeString",1000).TrimEnd('\0');
//DDE обмен в нашем случае в формате CF_TEXT. InTouch возвращает все значения в виде строки с \0\0\0 в конце, поэтому обрезаем.
double Tag1Value = Convert.ToDouble(Tag1);
client.Disconnect();
Drimascus писал(а):В InTuch ....
Drimascus писал(а):HSZ Sservice = DdeCreateStringHandle(inst,"OUN",CP_WINANSI);
DdeNameService(inst,Sservice,0,DNS_REGISTER);
Drimascus писал(а):Но все же, мне бы хотелось увидеть такой пример, который я просил, т.к. в инете такого я и не нашел.
...
int main(int argc, char* argv[])
{
char szApp[] = "EXCEL";
char szTopic[] = "C:\\Test.xls";
char szItem1[] = "R1C1";
...
...
int main(int argc, char* argv[])
{
char szApp[] = "view";
char szTopic[] = "Tagname";
char szItem1[] = "level3";
...
LexSL писал(а):Теперь буду разбираться, как постоянно отслеживать изменение результата, то есть реализовать с C++ такой вариант, как работа InTouch с Excel....
#include <windows.h>
...
//объявляете функцию обратного вызова:
void CALLBACK TimerProc(HWND hWnd, UINT nMsg, UINT nIDEvent, DWORD dwTime)
{
DDERequest(idInst, hConv, szItem1, szDesc1);
}
int main(....
{
MSG Msg;
int Counter=0;
...
iReturn = DdeInitialize(&idInst, (PFNCALLBACK)DdeCallback,
APPCLASS_STANDARD | APPCMD_CLIENTONLY, 0 );
if (iReturn!=DMLERR_NO_ERROR)
{
printf("DDE Initialization Failed: 0x%04x\n", iReturn);
Sleep(1500);
return 0;
}
....
...
//устанавливаем таймер на 5 сек
UINT TimerId = SetTimer(NULL, 0, 5000, &TimerProc);
if (!TimerId)
{
printf("Error set timer");
return 0;
}
while (GetMessage(&Msg, NULL, 0, 0))
{
++Counter;
if (Msg.message == WM_TIMER)
cout << "Counter: " << Counter << "; timer message\n";
else
cout << "Counter: " << Counter << "; message: " << Msg.message << '\n';
DispatchMessage(&Msg);
}
KillTimer(NULL, TimerId);
DdeDisconnect(hConv);
DdeUninitialize(idInst);
Sleep(3000);
return 1;
}
LexSL писал(а):
- Код: Выделить всё
KillTimer(NULL, TimerId);
DdeDisconnect(hConv);
DdeUninitialize(idInst);
Sleep(3000);
return 1;
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 48