bool InternalOpen(object form, string topicName) { bool result = false; Connection conn; if (m_connections.TryGetValue(form, out conn)) { return(true); } IntPtr hszService = DDEML.DdeCreateStringHandle(m_idInst, "Excel\0", DDEML.CP_WINANSI); IntPtr hszTopic = DDEML.DdeCreateStringHandle(m_idInst, topicName, DDEML.CP_WINANSI); // Подключаемся к разделу IntPtr hConv = DDEML.DdeConnect(m_idInst, hszService, hszTopic, (IntPtr)null); if (hConv != IntPtr.Zero) { m_connections.TryAdd(form, new Connection(topicName, hConv)); result = true; } DDEML.DdeFreeStringHandle(m_idInst, hszTopic); DDEML.DdeFreeStringHandle(m_idInst, hszService); return(result); }
void InternalPokeData(object form, string itemName, string strData) { Connection conn; if (m_connections.TryGetValue(form, out conn)) { IntPtr hszItem = DDEML.DdeCreateStringHandle(m_idInst, itemName, DDEML.CP_WINANSI); byte [] data = Encoding.GetBytes(strData); IntPtr hszDat = DDEML.DdeCreateDataHandle(m_idInst, data, data.Length, 0, hszItem, DDEML.CF_TEXT, 0); uint returnFlags = 0; DDEML.DdeClientTransaction(hszDat, -1, conn.Conv, hszItem, DDEML.CF_TEXT, DDEML.XTYP_POKE, Timeout.Infinite, ref returnFlags); DDEML.DdeFreeStringHandle(m_idInst, hszItem); } }
public void InternalRequest(object form, string itemName, out byte[] data) { Connection conn; data = new byte[0]; if (m_connections.TryGetValue(form, out conn)) { IntPtr hszItem = DDEML.DdeCreateStringHandle(m_idInst, itemName, DDEML.CP_WINANSI); uint returnFlags = 0; IntPtr dataHandle = DDEML.DdeClientTransaction(IntPtr.Zero, 0, conn.Conv, hszItem, DDEML.CF_TEXT, DDEML.XTYP_REQUEST, 1000, ref returnFlags); DDEML.DdeFreeStringHandle(m_idInst, hszItem); if (dataHandle != IntPtr.Zero) { uint length = DDEML.DdeGetData(dataHandle, null, 0, 0); data = new byte[length]; length = DDEML.DdeGetData(dataHandle, data, (uint)data.Length, 0); // Free the data handle created by the server. DDEML.DdeFreeDataHandle(dataHandle); } } }