2012-01-20 37 views
5

Tôi đang gặp một số sự cố khi biên dịch một số ứng dụng cũ trên VB6 vì tôi có một máy phát triển mới trong windows 7. (cái cũ của tôi là trên Windows XP.)Lỗi "Cuộc gọi thủ tục hoặc đối số không hợp lệ" trên "ADODB.Connection mới" chỉ khi được biên dịch trên Windows 7

Nếu tôi biên dịch dự án trên máy XP của mình, mọi thứ đều ổn. Nếu tôi biên dịch cùng một dự án trên máy tính Windows 7 của mình, nó vẫn chạy tốt, nhưng nếu tôi cố chạy nó trên máy XP, tôi gặp lỗi này.

Error Number: 5
Mô tả: gọi thủ tục không hợp lệ hoặc đối số

Nhờ xử lý lỗi của tôi, tôi biết rằng dòng ném lỗi này là:

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

tôi so sánh các tham chiếu trên cả hai máy và Project - References giống nhau: (Đối tượng dữ liệu Microsoft ActiveX 2.7 Thư viện)

Điều gì có thể gây ra lỗi này?

+0

Không chắc chắn, đó là một chút lạ, điều gì sẽ xảy ra nếu bạn sửa đổi nó thành một dòng "Dim objConn As New ADODB.Connection"? –

Trả lời

2

Đây là số Microsoft issue đã biết, nhưng tôi không nghĩ đó là lỗi; Tôi tin rằng khả năng tương thích đã bị hỏng vì lý do bảo mật. Sự cố có thể tồn tại trên các bản dựng không phải SP1 nếu bạn đã cài đặt certain hotfix. Có một vài tùy chọn được tham chiếu trong Microsoft KB. Dưới đây là một số khác article cung cấp bản cập nhật.

Chúng tôi gặp sự cố này và chúng tôi đã quyết định triển khai bản vá Tương thích ngược trên tất cả các máy phát triển và thay thế tất cả các tham chiếu ADO cũ bằng tham chiếu Tương thích ngược. Điều này đã làm việc tốt cho chúng tôi.

+0

Tôi rất vui khi chờ đợi để kiểm tra giải pháp của wqw, giải pháp được cung cấp bởi Microsoft trong 2517589 kb là nhiều hơn * dọn dẹp * so với việc giải nén tệp cũ ở phiên bản trước của cửa sổ vì nó xác định rõ ràng tham chiếu mới dưới dạng tham chiếu Tương thích ngược. Cảm ơn một lần nữa! – DavRob60

+0

Vì vậy, biết bạn phải thay đổi các tham chiếu dự án thành typelib "tương thích ngược", sau đó sau khi SP2 được áp dụng, bạn phải thay đổi các kiểu này thành typelib "thông thường". – wqw

+0

@wqw - Tôi chưa bao giờ thấy bất cứ điều gì từ Microsoft nói điều này sẽ được thay đổi trong SP2. Bạn có một liên kết? – UnhandledExcepSean

4

Đây là số problem in SP1 for Win7 đã biết sẽ được sửa trong SP2.

Cách xử lý sự cố trong SP1 là sao chép tệp typelib ADO cũ từ Win7 RTM trong C:\Program Files (x86)\Common Files\System\ado và đăng ký ở đó.

Đăng ký kiểu gõ ADO cũ này không phải là một nhiệm vụ tầm thường khi nhiều chuỗi diễn đàn đã hiển thị. Đây là một tập tin thực thi chúng tôi sử dụng trong cửa hàng của chúng tôi để sửa chữa ADO typelib vấn đề:

@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" 

Bạn cần cả msado28_old.tlbsubinacl.exe đặt trong cùng một thư mục như install.bat tập tin và .NET Framework 4.0 cài đặt cho tiện ích regtlibv12.exe.

Bây giờ bạn có thể biên dịch lại dự án của bạn tham chiếu ADO trên hộp Win7 mà không có vấn đề tương thích trên các phiên bản trước của Windows.

+0

Không nghi ngờ bạn, nhưng tôi rất muốn nhìn thấy một liên kết đến bất cứ điều gì nói rằng họ sẽ nhận được off duffs của họ và sửa lỗi này trong SP2. Vì nó là SP1 nên đã được thu hồi/phát hành lại. Tôi ghét để xem những gì khác tinh tế hơn screwups Win7 SP1 đã chôn cất trong nó. Hmm, có lẽ tôi chỉ nên theo liên kết của bạn, eh? – Bob77

+0

Tôi thấy điều này nhưng không đề cập đến SP2, tôi sẽ tiếp tục tìm kiếm và kiểm tra lại ở đây. 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

Họ đã hoàn nguyên 2.x và 6.0 typelibs và vận chuyển "không tương thích" 6.1 typelib cho x64 (VBA chỉ) phát triển trong Win8 Preview.Tôi nghĩ rằng (đọc một nơi nào đó) này sẽ được bao gồm trong Win7 SP2 quá. Tôi chủ yếu không quan tâm miễn là Win7 RTM typelib đang làm việc - chúng tôi đang sử dụng Win2003 cho máy chủ xây dựng của chúng tôi. – wqw