• 締切済み

VS2003とVS2005におけるActiveXの違いについて

お世話になります。 テンプレートのまま何も追加してない 空っぽのActiveXに署名してFreeBSDに置いて Windowsから実行しようとしています。 ひと月ほど前にVS2003で上記のことを行い、 XPからIE6,IE7,IE8で動作を確認しました。 最近、VS2005で同様のことを行ったところ、 XP+IE6でインストールまで成功するものの、 実行されないという現象が起こりました。 ※インストールの成功は  C:\Windows\Downloaded Program Filesに  入っていることで確認。  また、サーバのHTMLをローカルにコピーすると  正常にActiveXが実行可能。 そこで、もう一度VS2003に戻ってひと月前と 同じ手順でプロジェクトを作ったところ、 新しいプロジェクトで作ったActiveXも、 VS2005版と同じ現象が起こりました。 その際のエラーログは、次のようになりました。 ------------------------ 以下ログ ------------------------ *** Code Download Log entry (26 Jun 2009 @ 13:58:12) *** Code Download Error: (hr = 800c0400) Unknown Error!! Operation failed. Detailed Information: CodeBase: http://www.xxxxx.com/Plain2003.cab CLSID: {DDC859E4-5589-47BF-B14D-71FCEA506810} Extension: Type: LOG: Reporting Code Download Completion: (hr:800c0400 (FAILED), CLASSID: ddc859e4..., szCODE:(http://www.xxxxx.com/Plain2003.cab), MainType:(null), MainExt:(null)) --- Detailed Error Log Follows --- LOG: Download OnStopBinding called (hrStatus = 0 / hrResponseHdr = 0). LOG: URL Download Complete: hrStatus:0, hrOSB:800c0400, hrResponseHdr:0, URL:(http://www.xxxxx.com/Plain2003.cab) LOG: Reporting Code Download Completion: (hr:800c0400 (FAILED), CLASSID: ddc859e4..., szCODE:(http://www.xxxxx.com/Plain2003.cab), MainType:(null), MainExt:(null)) ------------------------ ログ以上 ------------------------ 残っていたひと月前のActiveXに署名を付けて 試したところ、正常に動作しましたので、 署名を付けるプロセスについては問題ないものと 思われます。 一方、プロジェクトを作るプロセスですが、 ・新規 - ATLプロジェクト ・ソリューションエクスプローラを右クリック  追加 - クラスの追加 - ATLコントロール をしているだけです。 本当に同じように作っているか、心配なので、 ディレクトリごとDiffを取ってみると... ぜ~~んぜんちが~~~う。 とても同じ手順で作ったとは思えません。 後からVS2005を入れたせいで、 VS2003がおかしくなったのではないかと 思うくらいですが、 私が間違っているかもしれません。 目的はVS2005で動作するActiveXを作ることです。 この現象について何かお気づきの点があれば ご教授願います。

みんなの回答

  • Yanch
  • ベストアンサー率50% (114/225)
回答No.1

ActiveX の CLASSID や、CLASS が重複してたりしませんか? もしユニークになってないなら、正しく動作しないかもしれません。

aO_Ob
質問者

補足

>Yanchさま 確かに、VS2003で作ったプロジェクトは、 最初のものをひな形として使い回しているので、 CLASSIDが重複しています。 しかし、これらのActiveXは、ひとつインストールしたら、 もう一つを入れる前に先に入れたものを消しているので 問題ないと勝手に思っていました。 今後は重複したものをインストールしないようにします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 自作したActiveXの配布&インストールがうまくできなくて困っています

    はじめましてVB超初心者です。 (そもそもVBの問題なのか、C++の問題なのかもわかりません) 小さい会社に勤めています。 現在、他のITベンダーが過去に作っていった業務アプリケーションの変更を担当させられているのですが、そのアプリにActiveXが含まれています。 結果、ActiveXも作り直しが必要ということまではわかっていて、ロジックとしてはこんな感じに作ればよいというところまでは、明確になっています。 ⇒ActiveX側の処理はIEの裏で単純なファイル操作(読み込と削除)をやっています。今回そこを少々修正します。 で、その修正対象のActiveXはATLベースでできており、CABファイルで配布されクライアントのIE上のJavaScriptから呼び出されてインストール/動作するようなブツに仕上がっています。 結果、似たようなものをVS2008の環境で作ってビルドしてdllを作って、その開発したクライアントでは正しく動く(IEからのファイル操作ができた)ことが確認できたのですが、最終的にCABファイルにして他の端末に配ってインストールさせて動かすと、うまくいきません。うまくインストールできないのです。 そこで強制的にdllをレジストリ登録してみようとしたら、「アプリケーションの構成が正しくない」と言われてしまいます。 ・開発したPC上だと、なんら問題なく動作/レジストリ登録ができます ・開発したPCと同環境PCでもNGなのでIE設定の問題ではないはずです おそらく何かが足りないのだと思っていて、修正前と修正後のソースをVS上で見えるソースですべて見比べてみたのですが、表面上での違いが全く見当たりません。 (素人考えですが、今気になっているのは、修正前のdllが129KB程度なのに対して、修正後のdllは50KBと小さくなってしまっています) 基本のキの字も判っていない素人で、誠に申し訳ないのですが、問題と思われる点ご教示いただけると非常に助かります。よろしくお願いいたします。

  • DirectXを用いたActiveXを用いてVistaで情報が取れない

    ActiveXからDirectXを叩いてOSやCPUなどの情報を 取得しようとしています。 XPでは問題なく情報が取れますが、Vistaでは 情報が取れる項目と取れない項目があります。 この現象について、教えてください。 APIは正常に終了しています。 OS(szOSExLongEnglish) → 正常取得 ベンダー(szSystemManufacturerEnglish) → n/a 型番(szSystemModelEnglish) → n/a CPU(szProcessorEnglish) → (空白) 物理メモリ(szPhysicalMemoryEnglish)  → 正常取得 IEのデフォルトの設定では上記のような状態ですが、 設定を変えて保護モードを外すと正常動作し、 すべての情報が取得できます。 しかし、保護モードが有効の状態で、 情報取得したいです。 以下にコードを書きます。 ※このコードはあるサンプルソースをほとんどそのまま使っています。 //////////////////////////////////////////////////////////////////////////////// // 初期化 //////////////////////////////////////////////////////////////////////////////// bool CDxDiagLib::Init(void) { HRESULT hr; DXDIAG_INIT_PARAMS dxDiagInitParam; m_pDxDiagProvider = NULL; m_pDxDiagRoot = NULL; g_DxDiagInfo = NULL; g_DxSoundInfo = NULL; // COMライブラリを使用できるように初期化 hr = CoInitialize(NULL); if (FAILED(hr)) { return false; } hr = CoCreateInstance( CLSID_DxDiagProvider, NULL, CLSCTX_INPROC_SERVER, IID_IDxDiagProvider, (LPVOID*) &m_pDxDiagProvider); if( FAILED(hr) || m_pDxDiagProvider == NULL) { return false; } // DXDIAG_INIT_PARAMSを初期化 ZeroMemory( &dxDiagInitParam, sizeof(DXDIAG_INIT_PARAMS) ); dxDiagInitParam.dwSize = sizeof(DXDIAG_INIT_PARAMS); dxDiagInitParam.dwDxDiagHeaderVersion = DXDIAG_DX9_SDK_VERSION; // WHQLを確認するかどうか // ネットを経由するので基本的にはfalseにしておく dxDiagInitParam.bAllowWHQLChecks = AllowWHQLChecks; dxDiagInitParam.pReserved = NULL; hr = m_pDxDiagProvider->Initialize( &dxDiagInitParam ); if( FAILED(hr) ) { return false; } hr = m_pDxDiagProvider->GetRootContainer( &m_pDxDiagRoot ); if( FAILED(hr) ) { return false; } return true; } //////////////////////////////////////////////////////////////////////////////// // DxDiag でSystem情報を取得 //////////////////////////////////////////////////////////////////////////////// bool CDxDiagLib::GetSyatemInfo( void ) { HRESULT hr; IDxDiagContainer* pObject = NULL; DWORD nInstanceCount = 0; DWORD nItem = 0; DWORD nCurCount = 0; // "DxDiag_SystemInfo" を取得 if( FAILED( hr = m_pDxDiagRoot->GetChildContainer( L"DxDiag_SystemInfo", &pObject ) ) ) { return false; } // 情報保存領域の確保 ZeroMemory(&g_DxDiagSysInfo, sizeof(g_DxDiagSysInfo)); if( FAILED( hr = GetStringValue( pObject, L"szOSExLongEnglish", g_DxDiagSysInfo.cOS , sizeof(g_DxDiagSysInfo.cOS) ) ) ) { SAFE_RELEASE( pObject ); return false; } if( FAILED( hr = GetStringValue( pObject, L"szSystemManufacturerEnglish", g_DxDiagSysInfo.cManufacturer , sizeof(g_DxDiagSysInfo.cManufacturer) ) ) ) { SAFE_RELEASE( pObject ); return false; } if( FAILED( hr = GetStringValue( pObject, L"szSystemModelEnglish", g_DxDiagSysInfo.cModel , sizeof(g_DxDiagSysInfo.cModel) ) ) ) { SAFE_RELEASE( pObject ); return false; } if( FAILED( hr = GetStringValue( pObject, L"szProcessorEnglish", g_DxDiagSysInfo.cProcessor , sizeof(g_DxDiagSysInfo.cProcessor) ) ) ) { SAFE_RELEASE( pObject ); return false; } if( FAILED( hr = GetStringValue( pObject, L"szPhysicalMemoryEnglish", g_DxDiagSysInfo.cMemory , sizeof(g_DxDiagSysInfo.cMemory) ) ) ) { SAFE_RELEASE( pObject ); return false; } SAFE_RELEASE( pObject ); return true; } よろしくお願いいたします。

  • ActiveX の作り方について教えて下さい

    以下の環境でMSのVC++ で ActiveX を作成しようとしているのですが、 うまくアクセス出来ません。   プラットフォーム:WindowsVista   VC++ :Ver.6 ActiveX の作り方について教えて下さい。 『プロジェクト』の『MFC ActiveX ControlWizard』を指定し、 プロジェクト名:Sample でプログラムを作成し、 下記の内容で、Variant 型のメソド:RetVariant を作成ました。 ┌─────────────────────────────── │ 1: VARIANT CSampleCtrl::RetVariant() │ 2: { │ 3: static VARIANT vaResult; │ 4: VariantInit(&vaResult); │ 5: // TODO: ここにディスパッチ ハンドラ コードを追加してください。 │ 6: │ 7: vaResult.vt = VT_I4; │ 8: vaResult.lVal = 1234; │ 9: │10: return vaResult; │11: } └─────────────────────────────── これを『C:\Windows\System32』にコピーし、『regsvr32.exe』で登録しました。 その後、少し古いですが、Excel2000 のVBAで下記のプログラムを実行すると、 正しく機能し、『1,234』と表示されました。 ┌─────────────────────────────── │ 1: Dim Obj │ 2: Dim ZZ │ 3: │ 4: Set Obj = CreateObject("SAMPLE.SampleCtrl.1") │ 5: │ 6: ZZ = Obj.RetVariant │ 7: MsgBox FormatNumber(ZZ,0) └─────────────────────────────── これをVBSで実行しようとすると、以下の様なエラーとなってしまいます。 ┌─────────────────────────────── │ 行: 6 │ 文字: 5 │ エラー: 致命的なエラーです。 │ コード: 8000FFFF │ ソース: (null) └─────────────────────────────── 4行目の所を『Set Obj = WScript.CreateObject("SAMPLE.SampleCtrl.1")』 としても同じでした。 どうしてVBAではOKで、VBSではNGになるのでしょうか。 どの様にしたらエラーを解消出来るのでしょうか。

  • MFCでActiveXの作り方

    VS6(SP5)+Win2K(SP4)で開発しています。 MFCでActiveX(OCX)までは、作成できたのですが、 それを、どうやってWebページ上で動かすかが分りません。 Webページとかでいろいろ探してみたのですが、下記のようなHTMLでテストをしましたが、ダウンロードがうまく行かず、「Download ProgramFiles」フォルダで不明となってしまいます。 どこかが、間違っているのだと思うのですが、どこでしょうか? HTML------------------- <html> <body> <p>test</p> <OBJECT codeBase="./MMOutput.cab#version=1.0.0.1" id=PSDWC1 height=357 classid="clsid:626F7510_1B6A_4F45_A8F8_56D4F9972DCE" width=343> </OBJECT> </body> </html> inf-------------------- ; Sample Inf file [Version] signature="$CHICAGOS" ;AdvancedINF=2.0 [Add.Code] MMOutput.ocx=MMOutput.ocx [MMOutput.ocx] file-win32-x86=thiscab CLSID={F6FE5E43-B7A5-48D9-9E5F-1014D9C560D6} FileVersion=1.0.0.1 ;DestDir=11 ;RegisterServer=no

  • お世話になっております。

    お世話になっております。 色々と調べたのですが、どうしても実現できないので質問させていただきます。 どなたかお助けください。 <やりたいこと>  VB.NET(2008)で作成し、クライアントにインストールしたアプリケーション(EXE)を、ブラウザ(IE6)から  セキュリティの警告なしで起動したい。 <現在の状況>  javascriptの"WScript.Shell"を使って起動するようにしたものの、、「このページのActiveXコントロールは安全でない可能性があり、ページのほかの部分に影響する可能性があります。ほかの部分に影響しても問題ありませんか?」というメッセージが表示されてしまう。  調べたところ、自分でActivexコントロールを作成してそれを呼び出した方がいいという結論になりました。  しかし、VB6.0がないため、とりあえずできるかどうかの確認でVS2010をインストールしました。  ただ、vs2010の場合C++でActivexをつくる必要があるようで、C++をまったく経験したことがない状態の私には垣根が高く、困っています。 <教えて頂きたいこと>  ・VB6.0をどうにか入手してそれを使った方がいいのか  ・vs2010でjavascriptから呼び出せるAxtivexを作成する方法  (プロジェクトの作成、ビルドまではできたのですが、イベントをどこにどう記入すればいいのかがわかりません)  ・上で作成したActivexをjavascriptから呼び出すためにはどうすればよいのか?  (クライアント上でしなければならないこと、javascriptからの呼び出し方法)  丸3日考えて色々やってみたのですが、どうにも時間が無駄になっている気がしてきて、ご質問させていただきました。  なにとぞよろしくお願いいたします。  

  • c++ で web browser

    windows 7 32 vs c++ 2010 で web browser を作成しようとして躓いています windows xp 32 vs c++ 2010 で動いた 下記コードを 7 で実行すると CreateWindow されません。 ie_hWnd = CreateWindow("AtlAxWin", "Shell.Explorer.2", WS_CHILD | WS_VISIBLE, 0, 0, 500, 500, main_hWnd, NULL, GetModuleHandle(NULL), NULL); 何をどう変えれば 7 でも動くようになりますか? よろしくお願いします。

  • うまく表現できませんが、IEと同じマークのショートカットアイコンが、知

    うまく表現できませんが、IEと同じマークのショートカットアイコンが、知らない間にどんどん増え続け、現在4個同じアイコンがディスプレイ上にあります。 一度このアイコンを普通に右クリックでの削除を行なったのですが、またいつの間にか元に戻っています。二度目の削除は現在行なっておりません。 意図的に作ったわけではないのに、なんで増えているのか原因不明です。 そのアイコンの下には、C Documents and Settings...(この後も続く)と書かれてあり、これをクリックすると、英語でエラーメッセージみたいなものが出てきます。一部を紹介すると下記のようなメッセージが綴られています。 *** Code Download Log entry (20 Jun 2010 @ 07:02:06) *** Code Download Error: (hr = 8*****7e) 指定されたモジュールが見つかりません。 その下にも十数行、内容不明の英語(省略)が書かれてあります。 このアイコンが出てこなくする方法と、完全に削除する方法を教えていただくと助かります。よろしくお願い致します OSはWindows XPです。

  • iアプリ jamファイルの動的な出力

    iアプリを作成しています。 .jamを.htaccessで AddType application/x-httpd-cgi .jam xxxxxはファイル名で共通アルファベットのみです。 ---- xxxxx.jam ---- use CGI; my $c = new CGI; $id = $c->param('usid'); print <<"__EOF__"; PackageURL = http://xxxxxxxx/xxxxx.jar AppParam = $id ..... __EOF__ ----- Download.html ----- <OBJECT declare id="xxxxx" data="xxxxx.jam" type="application/x-jam"> </OBJECT> <BR> <A ijam="#xxxxx" href="notapplicable.html">DOWNLOAD</A> この状態だとパラメータを送っていないのでは引き継がれないですが正常にDLできます。 が data="xxxxx.jam" これを data="xxxxx.jam?usid=112233" とすると 「ソフトに誤りがあります」 のエラーになります。 webサーバのログには  "GET /xxxxx.jam?usid=112233 HTTP/1.1" 200 235 "-" "DoCoMo/2.0 N904i(c100;TB;W24H16)" とでています。 いろいろ試しましたが何かいい方法ありましたら教えてほしいです。。。 よろしくお願いいたします。

    • ベストアンサー
    • Java
  • DirectInput でのエラー

    LPDIRECTINPUT8 m_pDI; LPDIRECTINPUTDEVICE8 m_pJoystick; 省略 // ゲームコントローラーの列挙 if(FAILED(hr = m_pDI->EnumDevices(DI8DEVCLASS_GAMECTRL, EnumJoysticksCalback, NULL, DIEDFL_ATTACHEDONLY))) return hr; //********************************************************/ BOOL CALLBACK InputDevice::EnumJoysticksCallback(const DIDEVICEINSTANCE* pdidInstance, VOID* pContext ) { HRESULT hr; hr = m_pDI->CreateDevice(pdidInstance->guidInstance, &m_pJoystick, NULL); if(FAILED(hr)){ return DIENUM_CONTINUE; }else{ return DIENUM_STOP; } } ゲームコントローラーの列挙をするためのコードを msdn や DirectXSDK のサンプルを 参考に書きました。でもどうしても以下のようなエラーがでます。 キャストなど試してみましたが解決にはいたりませんでした。 どうかご教授おねがいします。 d:\○○△△.cpp(30) : error C2664: 'IDirectInput8A::EnumDevices' : 2 番目の引数を 'BOOL (const DIDEVICEINSTANCE *,void *)' から 'LPDIENUMDEVICESCALLBACKA' に変換できません。

  • BHO-2

    http://eternalwindows.jp/browser/mshtml/mshtml01.html の関数を、 http://msdn.microsoft.com/ja-jp/library/bb250489(v=vs.85).aspx のなかに組み込みたいと思っています。 BOOL CHelloWorldBHO::GetDocumentFromIE(IHTMLDocument3 **pp) { HWND hwnd; UINT uMsg; LRESULT lResult; HRESULT hr; EnumChildWindows(FindWindow(TEXT("IEFrame"), NULL), EnumChildProc, (LPARAM)&hwnd); if (hwnd == NULL){ return FALSE; } uMsg = RegisterWindowMessage(TEXT("WM_HTML_GETOBJECT")); if (!SendMessageTimeout(hwnd, uMsg, 0, 0, SMTO_ABORTIFHUNG, 1000, (LPDWORD)&lResult)){ MessageBox(NULL, L"WM_HTML_GETOBJECT", L"BHO", MB_OK); return FALSE; } hr = ObjectFromLresult(lResult, IID_IHTMLDocument3, 0, (void **)pp); if (FAILED(hr)) return FALSE; MessageBox(NULL, L"Hello World! ie-end", L"BHO", MB_OK); return TRUE; } で、 uMsg = RegisterWindowMessage(TEXT("WM_HTML_GETOBJECT")); if (!SendMessageTimeout(hwnd, uMsg, 0, 0, SMTO_ABORTIFHUNG, 1000, (LPDWORD)&lResult)){ MessageBox(NULL, L"WM_HTML_GETOBJECT", L"BHO", MB_OK); return FALSE; } の部分で失敗します。 原因はなんでしょうか・ VS2005 と Win7 を使っています。 MessageBox(NULL, L"WM_HTML_GETOBJECT", L"BHO", MB_OK); はバグの確認のため入れてあります。 アドバイスよろしくお願いします。

このQ&Aのポイント
  • FAX-7860DWのトナーを交換しても「まくなくトナー交換」エラーが出るトラブルの解決方法をご紹介します。
  • FAX-7860DWのトナー交換後に表示される「まくなくトナー交換」というエラーの対処法を詳しく解説します。
  • FAX-7860DWのトナー交換時に表示される「まくなくトナー交換」というメッセージの問題点と対策をまとめました。
回答を見る

専門家に質問してみよう