使用VB6,我无法更改为VB .NET或其他任何内容。
我正在尝试以编程方式在调用应用程序的Form_Load()方法中注册COM库。
我在下面使用的方法在Windows 7上按预期工作,包括x86和x64。但是,当我尝试在Windows XP上使用相同的应用程序时,我收到了库未注册的错误:
我已经验证了该库正在注册,它在HKEY_LOCAL_MACHINE \ SOFTWARE \ Classes \ MyDll.Component以及HKEY_CLASSES_ROOT \ AppID \ Mydll.DLL
中的注册表中正确显示这是我正在使用的代码,任何人都可以告诉我为什么这只会在XP上发生以及如何解决它?
Private Declare Function DllRegisterServer Lib "MyDLL.dll" () As Long
Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Any, ByVal wParam As Any, ByVal lParam As Any) As Long
Private Sub Form_Load()
ReDim ConfigFiles(0)
ReDim ConfigFilesToAdd(0)
libID = LoadLibrary("MyDLL.dll")
Dim pAdd As Long
pAdd = GetProcAddress(libID, "DllRegisterServer")
Dim lResult As Long
lResult = CallWindowProc(pAdd, 0&, 0&, 0&, 0&)
Set IGDep = CreateObject(MyDLL.Component")
End Sub
我使用各种权限(包括管理员帐户)执行此过程,并确保我拥有注册表的所有权限。
感谢你们给予的任何帮助。