?? idispatch.java
字號:
/******************************************************************************* * Copyright (c) 2000, 2003 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Common Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/cpl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/package org.eclipse.swt.internal.ole.win32;import org.eclipse.swt.internal.win32.*;public class IDispatch extends IUnknown{public IDispatch(int address) { super(address);}public int GetIDsOfNames(GUID riid, String[] rgszNames, int cNames, int lcid, int[] rgDispId) { char[] buffer; int size = rgszNames.length; // create an array to hold the addresses int hHeap = OS.GetProcessHeap(); int ppNames = OS.HeapAlloc(hHeap, OS.HEAP_ZERO_MEMORY, size*4); int[] memTracker = new int[size]; try { // add the address of each string to the array for (int i=0; i<size; i++){ // create a null terminated array of char for each String int nameSize = rgszNames[i].length(); buffer = new char[nameSize +1]; rgszNames[i].getChars(0, nameSize, buffer, 0); // get the address of the start of the array of char int pName = OS.HeapAlloc(hHeap, OS.HEAP_ZERO_MEMORY, buffer.length * 2); OS.MoveMemory(pName, buffer, buffer.length * 2); // copy the address to the array of addresses COM.MoveMemory(ppNames + 4*i, new int[]{pName}, 4); // keep track of the Global Memory so we can free it memTracker[i] = pName; } return COM.VtblCall(5, address, new GUID(), ppNames, cNames, lcid, rgDispId); } finally { // free the memory for (int i=0; i<memTracker.length; i++){ OS.HeapFree(hHeap, 0, memTracker[i]); } OS.HeapFree(hHeap, 0, ppNames); }}public int GetTypeInfo(int iTInfo, int lcid, int[] ppTInfo ){ return COM.VtblCall(4, address, iTInfo, lcid, ppTInfo);}public int GetTypeInfoCount(int[] pctinfo ){ return COM.VtblCall(3, address, pctinfo);}public int Invoke(int dispIdMember, GUID riid, int lcid, int dwFlags, DISPPARAMS pDispParams, int pVarResult, EXCEPINFO pExcepInfo, int pArgErr[]) { return COM.VtblCall(6, address, dispIdMember, riid, lcid, dwFlags, pDispParams, pVarResult, pExcepInfo, pArgErr);}}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -