调用CoCreateInstance后得到了一个DLL(COM)的接口地址.
那然后比如我想调用里面的"speak".
怎么算接口表里函数的偏移?
下面是用eXeScope打开这个DLL的部分内容
Interface ISpVoice; // ISpVoice Interface
GUID={6C44DF74-72B9-4992-A1EC-EF996E0422D4};
function SetOutput(pUnkOutput:IUnknown; fAllowFormatChanges:I4): HResult;
function GetOutputObjectToken(out ppObjectToken:^^ISpObjectToken): HResult;
function GetOutputStream(out ppStream:^^ISpStreamFormat): HResult;
function Pause: HResult;
function Resume: HResult;
function SetVoice(pToken:^ISpObjectToken): HResult;
function GetVoice(out ppToken:^^ISpObjectToken): HResult;
function Speak(pwcs:LPWSTR; dwFlags:UI4; out pulStreamNumber:^UI4): HResult;
function SpeakStream(pStream:^IStream; dwFlags:UI4; out pulStreamNumber:^UI4): HResult;
function GetStatus(out pStatus:^SPVOICESTATUS; out ppszLastBookmark:^LPWSTR): HResult;
function Skip(pItemType:LPWSTR; lNumItems:I4; out pulNumSkipped:^UI4): HResult;
function SetPriority(ePriority:SPVPRIORITY): HResult;
function GetPriority(out pePriority:^SPVPRIORITY): HResult;
function SetAlertBoundary(eBoundary:SPEVENTENUM): HResult;
function GetAlertBoundary(out peBoundary:^SPEVENTENUM): HResult;
function SetRate(RateAdjust:I4): HResult;
function GetRate(out pRateAdjust:^I4): HResult;
function SetVolume(usVolume:UI2): HResult;
function GetVolume(out pusVolume:^UI2): HResult;
function WaitUntilDone(msTimeout:UI4): HResult;
function SetSyncSpeakTimeout(msTimeout:UI4): HResult;
function GetSyncSpeakTimeout(out pmsTimeout:^UI4): HResult;
function SpeakCompleteEvent: ^void;
function IsUISupported(pszTypeOfUI:^UI2; pvExtraData:^void; cbExtraData:UI4; out pfSupported:^I4): HResult;
function DisplayUI(hWndParent:wireHWND; pszTitle:^UI2; pszTypeOfUI:^UI2; pvExtraData:^void; cbExtraData:UI4): HResult;