首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

"关于VB生成标准DLL文件"做出来的link.exe有有关问题,请帮忙看看。

2011-12-29 
关于VB生成标准DLL文件做出来的link.exe有问题,请帮忙看看。。。大家好 我在“关于VB生成标准DLL文件 ”那里

"关于VB生成标准DLL文件"做出来的link.exe有问题,请帮忙看看。。。
大家好 我在“关于VB生成标准DLL文件 ”那里找到关于怎么用vb6生成标准DLL文件的方法,我按照方法上说得做了,但是发现方法上做出来的新link.exe总会出现一下错误,我不知道怎么解决,请问有人有头绪吗?

Run-time error '-2147319779 (8002801d)' :
Automation error
Library not registered

===============================原文===============================
工程NewLinker.vbp

模块文件NewLinker.bas

Option Explicit

Public Sub Main()
  Dim SpecialLink As Boolean, fCPL As Boolean, fResource As Boolean
  Dim intPos As Integer
  Dim strCmd As String
  Dim strPath As String
  Dim strFileContents As String
  Dim strDefFile As String, strResFile As String
  Dim oFS As New Scripting.FileSystemObject
  Dim fld As Folder
  Dim fil As File
  Dim ts As TextStream, tsDef As TextStream

  strCmd = Command
   
  Set ts = oFS.CreateTextFile(App.Path & "/lnklog.txt")
   
  ts.WriteLine "Beginning execution at " & Date & " " & Time()
  ts.WriteBlankLines 1
  ts.WriteLine "Command line arguments to LINK call:"
  ts.WriteBlankLines 1
  ts.WriteLine " " & strCmd
  ts.WriteBlankLines 2
   
  ' Determine if .DEF file exists
  '
  ' Extract path from first .obj argument
  intPos = InStr(1, strCmd, ".OBJ", vbTextCompare)
  strPath = Mid(strCmd, 2, intPos + 2)
  intPos = InStrRev(strPath, "/")
  strPath = Left(strPath, intPos - 1)
  ' Open folder
  Set fld = oFS.GetFolder(strPath)
   
  ' Get files in folder
  For Each fil In fld.Files
  If UCase(oFS.GetExtensionName(fil)) = "DEF" Then
  strDefFile = fil
  SpecialLink = True
  End If
  If UCase(oFS.GetExtensionName(fil)) = "RES" Then
  strResFile = fil
  fResource = True
  End If
  If SpecialLink And fResource Then Exit For
  Next
   
  ' Change command line arguments if flag set
  If SpecialLink Then
  ' Determine contents of .DEF file
  Set tsDef = oFS.OpenTextFile(strDefFile)
  strFileContents = tsDef.ReadAll
  If InStr(1, strFileContents, "CplApplet", vbTextCompare) > 0 Then
  fCPL = True
  End If
   
  ' Add module definition before /DLL switch
  intPos = InStr(1, strCmd, "/DLL", vbTextCompare)
  If intPos > 0 Then
  strCmd = Left(strCmd, intPos - 1) & _
  " /DEF:" & Chr(34) & strDefFile & Chr(34) & " " & _
  Mid(strCmd, intPos)
  End If
  ' Include .RES file if one exists
  If fResource Then
  intPos = InStr(1, strCmd, "/ENTRY", vbTextCompare)
  strCmd = Left(strCmd, intPos - 1) & Chr(34) & strResFile & _
  Chr(34) & " " & Mid(strCmd, intPos)
  End If
   
  ' If Control Panel applet, change "DLL" extension to "CPL"
  If fCPL Then
  strCmd = Replace(strCmd, ".dll", ".cpl", 1, , vbTextCompare)
  End If
   
  ' Write linker options to output file
  ts.WriteLine "Command line arguments after modification:"
  ts.WriteBlankLines 1


  ts.WriteLine " " & strCmd
  ts.WriteBlankLines 2
  End If
   
  ts.WriteLine "Calling LINK.EXE linker"
  Shell "linklnk.exe " & strCmd
  If Err.Number <> 0 Then
  ts.WriteLine "Error in calling linker..."
  Err.Clear
  End If
   
  ts.WriteBlankLines 1
  ts.WriteLine "Returned from linker call"
  ts.Close
End Sub

以上生成NewLinker.exe 替代VB中的link.exe

-------------------------------------

DLL模块文件,类模块文件

Option Explicit

Public Const DLL_PROCESS_DETACH = 0
Public Const DLL_PROCESS_ATTACH = 1
Public Const DLL_THREAD_ATTACH = 2
Public Const DLL_THREAD_DETACH = 3

Public Function DllMain(hInst As Long, fdwReason As Long, lpvReserved As Long) As Boolean
  Select Case fdwReason
  Case DLL_PROCESS_DETACH
  ' No per-process cleanup needed
  Case DLL_PROCESS_ATTACH
  DllMain = True
  Case DLL_THREAD_ATTACH
  ' No per-thread initialization needed
  Case DLL_THREAD_DETACH
  ' No per-thread cleanup needed
  End Select
End Function

' Return a Fibonacci number.
Public Function Fibo(ByVal N As Integer) As Long
  If N <= 1 Then
  Fibo = 1
  Else
  Fibo = Fibo(N - 1) + Fibo(N - 2)
  End If
End Function

-------------------------------------------

Fibonacci.def文件

NAME MathLib
LIBRARY MathMod
DESCRIPTION "Add-on Library of Mathematical Routines"
EXPORTS DllMain @1
  Fibo @2


--------------------------------------------


[解决办法]
这么做没有意义。

VB做出的所谓标准dll,只能用VB来调用。因为VB虚拟机需要被初始化。
[解决办法]

探讨

这么做没有意义。

VB做出的所谓标准dll,只能用VB来调用。因为VB虚拟机需要被初始化。

[解决办法]
探讨

引用:

这么做没有意义。

VB做出的所谓标准dll,只能用VB来调用。因为VB虚拟机需要被初始化。

我也纳闷??VB怎么会做出标准的来呢~~

热点排行