PRB: Visual Basic Read-only .exp/.lib Files Cause Compile Error (201565)



The information in this article applies to:

  • Microsoft Visual SourceSafe for Windows 5.0
  • Microsoft Visual SourceSafe for Windows 6.0
  • Microsoft Visual Basic Professional Edition for Windows 5.0
  • Microsoft Visual Basic Professional Edition for Windows 6.0
  • Microsoft Visual Basic Enterprise Edition for Windows 5.0
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0

This article was previously published under Q201565

SYMPTOMS

When compiling an ActiveX component, you might see the following error message:
Unexpected error occurred in code generator or linker. --View error messages?
If you click Yes, messages similar to the following might appear:
<project name>.OBJ : warning LNK4104: export of symbol"DllUnregisterServer" should be PRIVATE
<project name>.OBJ : warning LNK4104: export of symbol "DllGetClassObject" should be PRIVATE
<project name>.OBJ : warning LNK4104: export of symbol "DllRegisterServer" should be PRIVATE
<project name>.OBJ : warning LNK4104: export of symbol "DllCanUnloadNow" should be PRIVATE
Creating library <path to .lib file> and object <path to .exp file>
LINK : fatal error LNK1104: cannot open file "<path to .lib file>"
LINK : fatal error LNK1141: failure during build of exports file
NOTE: These warnings might vary or not appear at all.

CAUSE

The <project name>.exp and/or <project name>.lib files in the project directory are read-only.

RESOLUTION

Change the read-only attribute to read/write.

STATUS

This behavior is by design.

MORE INFORMATION

The Export file (.exp) and Import Library file (.lib) are created in a Visual Basic project directory when, for example, you compile a component project. These files are actually Visual C++ files. Their purpose is explained in greater detail in Visual C++ Help files.

One typical scenario in which these files might unexpectedly become read-only is if they are manually added to source control through the Visual SourceSafe Explorer. Unchecked out files in Visual SourceSafe are marked read-only. Microsoft recommends that you not place these types of files under source control. And, if you have such files currently under source control, you should remove them.

NOTE: This problem is not specific to Visual SourceSafe. Simply changing the file's attribute manually, or by any other process, to read-only would be sufficient to reproduce this behavior.

Steps to Reproduce Behavior

  1. Create an ActiveX DLL project and save it.
  2. Compile the project. (This step creates the .lib and .exp files.)
  3. Next, from project's compile directory in Windows Explorer, right-click either the .lib or .exp file and select Properties to change the file's attribute to read-only.
  4. Compile the project again to the same directory as used in Step 2.

REFERENCES

For additional information, please see the following articles in the Microsoft Knowledge Base:

156513 INFO: Which Visual C++ Files to Add to Source-Code Control

132340 INFO: Common File Extensions Used by Visual C++

166470 PRB: LINK Fatal Error LNK1104 Cannot Open File

193089 PRB: Unexpected Error Occurs in Code Generator or Linker

166275 HOWTO: Debug a Native Code Visual Basic Component in VC++

For details about .exp files and import libraries, see "Working with Import Libraries and Export Files" in Visual C++ Help.

Modification Type:MajorLast Reviewed:5/1/2001
Keywords:kbprb KB201565