CMWImpt.dll was loaded, but the DllRegisterServer entry point was not was not found. This file cannot be registered' - dll

I have a vb6 project, and when i tried to run the source code I got an error which points to the CMWImpt.dll.
I tried to put the dll in the System32, sysWow64, and project folder, and registered it. But this is the error:
CMWImpt.dll was loaded, but the DllRegisterServer entry point was not was not found. This file cannot be registered'
anyone who encountered this before?
thanks

What's the error message?
Not all dlls are registerable. Only COM dlls have registration. And they are usually but not always in the dll (sometimes in another dll).
Error messages that mention dll names are not COM errors mostly. COM errors are of the type "Cannot create activex object", unless correctly registered and the file deleted.
So your file is either corrupted or not a COM dll.
The WinAPI uses dynamic linking. DLL stands for Dynamic Link Library, COM dlls have 4 or so standard dynamic functions to controll COM like DLLRegisterServer.
So you need to provide more detailed info on the problem.

Related

Cannot find the reference specified-Visual Basic 2013

I've got a new system. I am trying to connect to and run the system through a 64-bit Windows 7 PC. The company sent me a Visual Basic project for that. It uses .NET framework 4 and Windows Form Applications. The target CPU is x86.
In the References tab, next to three of the COM references there are "The system cannot find the reference specified" statements. When built, the project gives the namespace errors and warnings because of these objects. The other references work fine. I've then seen those .dll files in the debug folder. I think they are generated by the company before sending me. They also exist in the bin\debug folder.
I've removed the three from the references list in the project and tried the following separately:
1) In the project, refer to the .dll files that exist in the debug folder. (Seems a fake way, but removes all the errors when the project is built. When debug, it gives the "Retrieving the COM class factory for component with CLSID ... failed due to the following error: 80040154" error.)
2) Copy the .dll files in the debug folder to C:\Windows\SysWOW64 folder, then register through regsvr32 "name.dll" in the console as admin. This way, I get the ".dll was loaded, but the DllRegisterServer entry point was not found" error. (In the regedit window, the registry editor cannot find the ID's of those references that are seen in the project properties in VB.)
3) Do the item (2), but with the C:\Windows\System32 folder instead of SysWOW64. The same error when registering.
4) Changed the solution platform to x86 and tried the items 1,2, and 3. Still the same errors.
Do I have to register these dll files? And, am I supposed to register exactly these dll files that exist in the debug folder? Or are they supposed to be generated after build by referring to some 'missing' type libraries in the references tab? I don't have these type libraries, though.
All suggestions are welcome ASAP. Thanks in advance.
You have three Interop dlls for your project, correct? These dlls just allow you to use a COM dll without having to talk directly to the COM dlls yourself.
Referencing the dlls in the bin/Debug directory should be fine, since those are probably the correct dlls that the project was built with. However, you will want to move them to another folder before continuing.
What you need to get from the company that sent you the project is the original COM dlls and their dependencies, if any. Usually an interop dll is called Microsoft.Phone.Interop.dll where it is performing interop with Microsoft.Phone.dll. Microsoft.Phone.dll needs to be registered on your computer using regsvr32 and then you just need a reference to the interop dll.

Problems registering a dll

I am trying to register a .dll file but I am getting an error. The .dll is in the SysWOW64 folder, through the command line I then cd \Windows\SysWOW64 and run the following command regsvr32 php_sdo.dll
I then get the following error:
"The module "php_sdo.dll" failed to load.
Make sure the binary is stored at the specified path of debug it to check for problems with the binary or dependent.DLL files.
The specified module could not be found"
This kind of failure often occurs when one of the dependency of the DLL one wants to register (which physically means, that the program that attempts to register the DLL internally calls LoadLibrary) is missing. You can have a look at the dependency (tree) of your DLL using Dependency Walker.

Using tlbexp.exe on a COM dll

I am trying to set up communication between Centura and a COM .dll. (Downloaded from http://download.resip.fr for a database import)
Centura requires a .tlb file to be able to communicate to this component. Normally I would use regasm /tlb to generate the .tlb but seeing as it is a COM .dll this is not possible.
I found that I could use tlbexp for .NET dll's: http://msdn.microsoft.com/en-us/library/hfzzah2c(v=vs.80).aspx
I tried this out, knowing it would probably fail (as I have COM .dll). I received this error:
TlbExp : error TX0000 : Could not load file or assembly 'file:///C:\Windows\system32\ResipBcb.dll' or one of its dependencies. The module was expected to contain an assembly manifest.
Using Dependency Walker I noticed two .dll's missing. I found ieshims.dll online but I can't find the wer.dll. See this question.
I don't know if the tlbexp failure has anything to do with this file that is missing?
To sum up, my question is:
How do I get a .tlb from this .dll? I can't seem to find any way to extract the .tlb out of this COM .dll.
Best regards
Clint Cambier
What you are trying to do only works for .NET assemblies, not native COM servers. The type library for them is almost always embedded inside the DLL. In Visual Studio, use File + Open + File and select the DLL. Open the "TYPELIB" node, right-click the resource (usually 1), Export. Save it to, say, a project directory, use the .tlb filename extension.
TblExp and regasm are only valid on .NET assemblies, what you have is most likely a standard non .NET COM DLL. So neither of those two commands are valid on this DLL.
Standard COM objects are registered using regsvr32. Try running that against your DLL and see if it registers correctly. If it does you should see it listed in Centura's ActiveX explorer.

Are there two kinds of .dll files in Windows?

I know that some dll files have to be registered with the regsvr32 command. I tried that on a dll files I got and got an error message saying that "the entry-point DLLRegisterServer was not found." I heard that to use theis dll file you have to use "ctypes." So what are you supposed to do with it?
Some DLLs contain COM interfaces. These can be registered, and provide hooks to do so. Others are just normal DLLs, and have entry points with names and/or ordinals. They must be linked appropriately by the script/executable.

Log Parser Early Binding

Is it possible to use early binding with LogParser.dll on VB6/VBA? When I try to set a reference to it, it just disappears with no error.
Oorang,
I ran Dependency Walker on the DLL. It says that dwmapi.dll is missing. Googling dwmapi.dll comes up with all sorts of matches, all related to problems with early binding of COM objects. dwmapi is a delay-loaded dll that exists on Vista machines.
I tried putting a copy of dwmapi.dll on my machine in the system32 directory. It won't register with regsvr32 (no surprise there, really), but it did eliminate the missing reference in Dependency Walker. However, Dependency Walker still returns an error message that says:
Warning: At least one module has an unresolved import due to a missing export function in a delay-load dependent module.
Didn't really expect it to work anyway, did we?
dwmapi is not even listed in Microsoft's DLL database.
I saw you in the IIS forums. No answer yet.
Any chance you could late bind this thing?
Have you registered the DLL with COM?
Before using the Log Parser scriptable COM components on a computer, the "LogParser.dll" binary must be registered with the computer's COM infrastructure by executing the following command in the directory containing the "LogParser.dll" binary
C:\LogParser>regsvr32 LogParser.dll