by hira » 2005年12月25日(日) 23:00
どのような状況のソースコードでしょうか?というのも、GUID構造体の定義そのものには不具合は見つからず、Align(2)とする必要性はありません(デフォルトでは、構造体アラインメントは各メンバサイズとなります)。
確かに、単にGUID構造体を宣言しただけでは問題ないようですね。
少し慌てすぎたようです(^^;
ということで、GUID構造体が「アクセスできません」となるコードを書いておきます。どこかのサンプルを拾って書いてみたものです。
※「CoInitialize」を呼び出す前の段階ですでに「アクセスできません」となります
※ #prompt を書かない(QueryInterfaceの戻り値の Print も消す)とエラーが起こらなくなるようです
[ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]コード: 全て選択
TypeDef HRESULT=Long
Declare Function CLSIDFromProgID Lib "ole32" Alias "CLSIDFromProgID" (lpszProgID As *Char,pclsid As *GUID) As HRESULT
Class IDispatch
Inherits IUnknown
Public
Virtual Function GetTypeInfoCount() As HRESULT
Virtual Function GetTypeInfo() As HRESULT
Virtual Function GetIDsOfNames() As HRESULT
Virtual Function Invoke() As HRESULT
End Class
Class IWebBrowser
Inherits IDispatch
Public
Virtual Function GoBack() As HRESULT
Virtual Function GoForward() As HRESULT
Virtual Function GoHome() As HRESULT
Virtual Function GoSearch() As HRESULT
Virtual Function Navigate() As HRESULT
Virtual Function Refresh() As HRESULT
Virtual Function Refresh2() As HRESULT
Virtual Function Stop() As HRESULT
Virtual Function Application() As HRESULT
Virtual Function Parent() As HRESULT
Virtual Function Container() As HRESULT
Virtual Function Document() As HRESULT
Virtual Function TopLevelContainer() As HRESULT
Virtual Function Type2() As HRESULT
Virtual Function Left() As HRESULT
Virtual Function Left2() As HRESULT
Virtual Function Top() As HRESULT
Virtual Function Top2() As HRESULT
Virtual Function Width() As HRESULT
Virtual Function Width2() As HRESULT
Virtual Function Height() As HRESULT
Virtual Function Height2() As HRESULT
Virtual Function LocationName() As HRESULT
Virtual Function LocationURL() As HRESULT
Virtual Function Busy() As HRESULT
End Class
Class IWebBrowserApp
Inherits IWebBrowser
Public
Virtual Function Quit() As HRESULT
Virtual Function ClientToWindow() As HRESULT
Virtual Function PutProperty() As HRESULT
Virtual Function GetProperty() As HRESULT
Virtual Function Name() As HRESULT
Virtual Function HWND() As HRESULT
Virtual Function FullName() As HRESULT
Virtual Function Path() As HRESULT
Virtual Function Visible() As HRESULT
Virtual Function PutVisible(bBool As Long) As HRESULT
Virtual Function StatusBar() As HRESULT
Virtual Function StatusBar2() As HRESULT
Virtual Function StatusText() As HRESULT
Virtual Function StatusText2() As HRESULT
Virtual Function ToolBar() As HRESULT
Virtual Function ToolBar2() As HRESULT
Virtual Function MenuBar() As HRESULT
Virtual Function MenuBar2() As HRESULT
Virtual Function FullScreen() As HRESULT
Virtual Function FullScreen2() As HRESULT
End Class
Class IWebBrowser2
Inherits IWebBrowserApp
Public
Virtual Function Navigate2(URL As VoidPtr,Flags As VoidPtr,TargetFrameName As VoidPtr,PostData As VoidPtr,Headers As VoidPtr) As HRESULT
Virtual Function QueryStatusWB() As HRESULT
Virtual Function ExecWB() As HRESULT
Virtual Function ShowBrowserBar() As HRESULT
Virtual Function ReadyState() As HRESULT
Virtual Function Offline() As HRESULT
Virtual Function Offline2() As HRESULT
Virtual Function Silent() As HRESULT
Virtual Function Silent2() As HRESULT
Virtual Function RegisterAsBrowser() As HRESULT
Virtual Function RegisterAsBrowser2() As HRESULT
Virtual Function RegisterAsDropTarget() As HRESULT
Virtual Function RegisterAsDropTarget2() As HRESULT
Virtual Function TheaterMode() As HRESULT
Virtual Function TheaterMode2() As HRESULT
Virtual Function AddressBar() As HRESULT
Virtual Function AddressBar2() As HRESULT
Virtual Function Resizable() As HRESULT
Virtual Function Resizable2() As HRESULT
End Class
#prompt
'{00000000-0000-0000-C000-000000000046}
Dim IID_IUnknown=[&H00000000,&H0000,&H0000,[&HC0,&H00,&H00,&H00,&H00,&H00,&H00,&H46]] As GUID
'{D30C1661-CDAF-11D0-8A3E-00C04FC9E26E}
Dim IID_IWebBrowser2=[&HD30C1661,&HCDAF,&H11D0,[&H8A,&H3E,&H00,&HC0,&H4F,&HC9,&HE2,&H6E]] As GUID
Dim cid As GUID
Dim pUnknown=NULL As *IUnknown
Dim pBrowser=NULL As *IWebBrowser2
Dim lpProgID As *Word
CoInitialize(NULL)
lpProgID=malloc(128*SizeOf(Word))
MultiByteToWideChar(0,0,"InternetExplorer.Application",-1,lpProgID,128)
CLSIDFromProgID(lpProgID,VarPtr(cid))
CoCreateInstance(cid,NULL,CLSCTX_ALL,IID_IUnknown,VarPtr(pUnknown))
Print pUnknown->QueryInterface(VarPtr(IID_IWebBrowser2),VarPtr(pBrowser))
pBrowser->PutVisible(1)
pUnknown->Release()
pBrowser->Release()
free(lpProgID)
CoUninitialize()
[quote]どのような状況のソースコードでしょうか?というのも、GUID構造体の定義そのものには不具合は見つからず、Align(2)とする必要性はありません(デフォルトでは、構造体アラインメントは各メンバサイズとなります)。 [/quote]
確かに、単にGUID構造体を宣言しただけでは問題ないようですね。
少し慌てすぎたようです(^^;
ということで、GUID構造体が「アクセスできません」となるコードを書いておきます。どこかのサンプルを拾って書いてみたものです。
※「CoInitialize」を呼び出す前の段階ですでに「アクセスできません」となります
※ #prompt を書かない(QueryInterfaceの戻り値の Print も消す)とエラーが起こらなくなるようです
[hide][code]TypeDef HRESULT=Long
Declare Function CLSIDFromProgID Lib "ole32" Alias "CLSIDFromProgID" (lpszProgID As *Char,pclsid As *GUID) As HRESULT
Class IDispatch
Inherits IUnknown
Public
Virtual Function GetTypeInfoCount() As HRESULT
Virtual Function GetTypeInfo() As HRESULT
Virtual Function GetIDsOfNames() As HRESULT
Virtual Function Invoke() As HRESULT
End Class
Class IWebBrowser
Inherits IDispatch
Public
Virtual Function GoBack() As HRESULT
Virtual Function GoForward() As HRESULT
Virtual Function GoHome() As HRESULT
Virtual Function GoSearch() As HRESULT
Virtual Function Navigate() As HRESULT
Virtual Function Refresh() As HRESULT
Virtual Function Refresh2() As HRESULT
Virtual Function Stop() As HRESULT
Virtual Function Application() As HRESULT
Virtual Function Parent() As HRESULT
Virtual Function Container() As HRESULT
Virtual Function Document() As HRESULT
Virtual Function TopLevelContainer() As HRESULT
Virtual Function Type2() As HRESULT
Virtual Function Left() As HRESULT
Virtual Function Left2() As HRESULT
Virtual Function Top() As HRESULT
Virtual Function Top2() As HRESULT
Virtual Function Width() As HRESULT
Virtual Function Width2() As HRESULT
Virtual Function Height() As HRESULT
Virtual Function Height2() As HRESULT
Virtual Function LocationName() As HRESULT
Virtual Function LocationURL() As HRESULT
Virtual Function Busy() As HRESULT
End Class
Class IWebBrowserApp
Inherits IWebBrowser
Public
Virtual Function Quit() As HRESULT
Virtual Function ClientToWindow() As HRESULT
Virtual Function PutProperty() As HRESULT
Virtual Function GetProperty() As HRESULT
Virtual Function Name() As HRESULT
Virtual Function HWND() As HRESULT
Virtual Function FullName() As HRESULT
Virtual Function Path() As HRESULT
Virtual Function Visible() As HRESULT
Virtual Function PutVisible(bBool As Long) As HRESULT
Virtual Function StatusBar() As HRESULT
Virtual Function StatusBar2() As HRESULT
Virtual Function StatusText() As HRESULT
Virtual Function StatusText2() As HRESULT
Virtual Function ToolBar() As HRESULT
Virtual Function ToolBar2() As HRESULT
Virtual Function MenuBar() As HRESULT
Virtual Function MenuBar2() As HRESULT
Virtual Function FullScreen() As HRESULT
Virtual Function FullScreen2() As HRESULT
End Class
Class IWebBrowser2
Inherits IWebBrowserApp
Public
Virtual Function Navigate2(URL As VoidPtr,Flags As VoidPtr,TargetFrameName As VoidPtr,PostData As VoidPtr,Headers As VoidPtr) As HRESULT
Virtual Function QueryStatusWB() As HRESULT
Virtual Function ExecWB() As HRESULT
Virtual Function ShowBrowserBar() As HRESULT
Virtual Function ReadyState() As HRESULT
Virtual Function Offline() As HRESULT
Virtual Function Offline2() As HRESULT
Virtual Function Silent() As HRESULT
Virtual Function Silent2() As HRESULT
Virtual Function RegisterAsBrowser() As HRESULT
Virtual Function RegisterAsBrowser2() As HRESULT
Virtual Function RegisterAsDropTarget() As HRESULT
Virtual Function RegisterAsDropTarget2() As HRESULT
Virtual Function TheaterMode() As HRESULT
Virtual Function TheaterMode2() As HRESULT
Virtual Function AddressBar() As HRESULT
Virtual Function AddressBar2() As HRESULT
Virtual Function Resizable() As HRESULT
Virtual Function Resizable2() As HRESULT
End Class
#prompt
'{00000000-0000-0000-C000-000000000046}
Dim IID_IUnknown=[&H00000000,&H0000,&H0000,[&HC0,&H00,&H00,&H00,&H00,&H00,&H00,&H46]] As GUID
'{D30C1661-CDAF-11D0-8A3E-00C04FC9E26E}
Dim IID_IWebBrowser2=[&HD30C1661,&HCDAF,&H11D0,[&H8A,&H3E,&H00,&HC0,&H4F,&HC9,&HE2,&H6E]] As GUID
Dim cid As GUID
Dim pUnknown=NULL As *IUnknown
Dim pBrowser=NULL As *IWebBrowser2
Dim lpProgID As *Word
CoInitialize(NULL)
lpProgID=malloc(128*SizeOf(Word))
MultiByteToWideChar(0,0,"InternetExplorer.Application",-1,lpProgID,128)
CLSIDFromProgID(lpProgID,VarPtr(cid))
CoCreateInstance(cid,NULL,CLSCTX_ALL,IID_IUnknown,VarPtr(pUnknown))
Print pUnknown->QueryInterface(VarPtr(IID_IWebBrowser2),VarPtr(pBrowser))
pBrowser->PutVisible(1)
pUnknown->Release()
pBrowser->Release()
free(lpProgID)
CoUninitialize()
[/code][/hide]