2012-01-20 6 views
5

Windows 7で新しい開発マシンを入手して以来、VB6で従来のアプリケーションをコンパイルすると問題が発生します。私の古いものはWindows XP上にありました)Windows 7でコンパイルした場合のみ、「新規ADODB.Connection」の「無効なプロシージャ呼び出しまたは引数」エラーが発生する

私のXPマシンでプロジェクトをコンパイルすると、すべて問題ありません。 私のWindows 7マシンで同じプロジェクトをコンパイルすると、それでも問題なく動作しますが、XPマシンで実行しようとするとこのエラーが発生します。

エラー番号:5
説明:無効なプロシージャ呼び出しまたは引数

私のエラーハンドラへ

おかげで、私はこのエラーをスローラインであることを知っている:

Dim objConn As ADODB.Connection 
--> Set objConn = New ADODB.Connection 

I両方のマシンとProject - Referencesの参照は同じです:(Microsoft ActiveXデータオブジェクト2.7ライブラリ

このエラーの原因は何ですか?

+0

これは少し奇妙なことですが、「Dim objConn As New ADODB.Connection」という行に修正するとどうなりますか? –

答えて

2

これは既知のMicrosoft issueですが、バグではないと思います。セキュリティ上の理由から、互換性が壊れていると私は考えているcertain hotfixがインストールされている場合、SP1以外のビルドでこの問題が発生していた可能性があります。 Microsoft KBには、いくつかのオプションがあります。更新を提供する別のarticleがあります。

この問題が発生し、すべての開発者マシンに後方互換性パッチを展開し、すべての従来のADO参照を後方互換性参照に置き換えることにしました。これは私たちのためにうまくいきました。

+0

私はwqwのソリューションをテストするのを待っていて満足しています.2517589 kbのマイクロソフトが提供するソリューションは、以前のバージョンのWindowsを旧バージョンのWindowsよりもクリーンなものにしています。再度、感謝します! – DavRob60

+0

プロジェクト参照を「下位互換性のある」typelibに変更する必要があることが分かっている場合は、SP2を適用した後、これらを「通常の」typelibに戻す必要があります。 – wqw

+0

@ wqw - 私はMicrosoftから、これがSP2で変更されると述べたものは見たことがありません。リンクがありますか? – UnhandledExcepSean

4

これはSP2で修正されることが知られているproblem in SP1 for Win7です。

SP1で問題を処理する方法は、Win97 RTMの古いADO typelibファイルをC:\Program Files (x86)\Common Files\System\adoにコピーしてそこに登録することです。

この古いADOタイプライブラリの登録は、多数のフォーラムスレッドが示しているように、簡単な作業ではありません。ここでは、当店で使用してバッチファイルはタイプライブラリの問題ADO修正することです:

@echo off 
set regtlib="%windir%\Microsoft.NET\Framework\v4.0.30319\regtlibv12.exe" 
set subinacl="%~dp0subinacl.exe" 
set target_dir=%CommonProgramFiles%\System\ado 
if not "%CommonProgramFiles(x86)%"=="" set target_dir=%CommonProgramFiles(x86)%\System\ado 

copy "%~dp0msado28_old.tlb" "%target_dir%\msado28_old.tlb" > nul 
%subinacl% /subkeyreg HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{2A75196C-D9EB-4129-B803-931327F72D5C} /setowner=Administrators > nul 
%subinacl% /subkeyreg HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{2A75196C-D9EB-4129-B803-931327F72D5C} /grant=Administrators=F > nul 
%subinacl% /subkeyreg HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\TypeLib\{2A75196C-D9EB-4129-B803-931327F72D5C} /setowner=Administrators > nul 
%subinacl% /subkeyreg HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\TypeLib\{2A75196C-D9EB-4129-B803-931327F72D5C} /grant=Administrators=F > nul 
%regtlib% -u "%target_dir%\msado28.tlb" 
%regtlib% "%target_dir%\msado28_old.tlb" 

をあなたが必要との両方msado28_old.tlbregtlibv12.exeユーティリティのinstall.batファイルおよび.NET Framework 4.0のセットアップと同じフォルダに配置subinacl.exe

以前のバージョンのWindowsで互換性の問題なしに、Win7ボックスでADOを参照するプロジェクトを再コンパイルすることができます。

+0

あなたを疑うことはありませんが、私は彼らがダフを降りてSP2でこれを修正すると言うものへのリンクを見たいと思っています。 SP1がリコール/再発行されたはずです。私はWin7 SP1がそれに埋もれている他のより微妙なねじれを見て嫌いです。うーん、私はちょうどあなたのリンクを辿るべきでしょうか? – Bob77

+0

私はこれを参照してくださいSP2の言及は、私は見て、ここに戻ってチェックし続けます。 http://blogs.msdn.com/b/psssql/archive/2011/10/03/yes-we-made-a-mistake-and-are-finally-going-to-fix-it.aspx – Bob77

+0

彼らは元に戻った2.xと6.0のtypelibと、Win8 Previewのx64(VBAのみ)開発用の "互換性のない" 6.1タイプライブラリを出荷しました。私は(どこか読んで)これらはWin7 SP2にも含まれると思う。 Win7 RTM typelibが動作している限り私はほとんど気にしません.Win2003をビルドサーバーに使用しています。 – wqw

関連する問題