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

软件中使用的DLL文件除了放置在SYSTEM32和软件目录下,可否放在其它小弟我想放的目录下

2013-06-19 
软件中使用的DLL文件除了放置在SYSTEM32和软件目录下,可否放在其它我想放的目录下软件中使用的DLL文件除了

软件中使用的DLL文件除了放置在SYSTEM32和软件目录下,可否放在其它我想放的目录下
软件中使用的DLL文件除了放置在SYSTEM32和软件目录下,可否放在其它我想放的目录下

比如我的软件安装目录为  d:\润友物业管理系统  可否将其相关的DLL文件放置在 d:\润友物业管理系统\dll 目录下,但不影响DLL函数的调用。

[解决办法]
可以放其它目录,是否影响调用,看你怎么做了,可以指定环境变量的路径和你的程序声明可以指定的特定路径下面去
[解决办法]
如果是 ActiveX Dll,必须先注册再使用,无论放在哪里,都是通过注册信息定位的,无影响。
如果是标准Dll,必须在能被搜索的目录下,参考 http://bbs.csdn.net/topics/300112099。
[解决办法]
注册:就是将版本、库名、类名、GUID、目录等信息写入注册表。
你在VB中编译一个 ActiveX Dll 时就自动完成注册了。
安装程序也会负责进行注册。
[解决办法]
ActiveX Dll 的好处就是不拘泥其路径和文件名,注册了就可以用。

标准 DLL 的缺省路径还有可执行文件路径。如果放在其他路径,代码中就要处理了。

[解决办法]

引用:
我的DLL文件是标准DLL,如何打包安装后放在  d:\润友物业管理系统\dll  目录下 ,不影响我的DLL的正常调用呢?

这就靠你的安装工具了,通常可以自己添加需要打包的文件(当然可以添加标准Dll),并可指定安装到哪个目录(系统目录、程序目录)。
[解决办法]
引用:
ActiveX Dll 的好处就是不拘泥其路径和文件名,注册了就可以用。

标准 DLL 的缺省路径还有可执行文件路径。如果放在其他路径,代码中就要处理了。
+1
[解决办法]
如果你能确定你的 DLL 一定能放在 d:\润友物业管理系统\dll 路径下,你的 DLL 函数声明的文件名前加上此路径就是了。

 
[解决办法]
引用:
打包程序是可以选择将DLL文件放置到哪个目录中,但是,我的程序如何知道DLL文件被放到哪个既不属于系统目录也不属于软件自己目录的目录中呢?

莫名其妙!
你制作的打包程序,还会将 Dll 安装到“既不属于系统目录也不属于软件自己目录的目录中”?
找虐啊!
[解决办法]
引用:
Quote: 引用:
打包程序是可以选择将DLL文件放置到哪个目录中,但是,我的程序如何知道DLL文件被放到哪个既不属于系统目录也不属于软件自己目录的目录中呢?

莫名其妙!
你制作的打包程序,还会将 Dll 安装到“既不属于系统目录也不属于软件自己目录的目录中”?
找虐啊!


64位就不行,必须放SYSWOW下面。
[解决办法]
引用:
64位就不行,必须放SYSWOW下面。

32位程序运行时访问 System32 目录被重定向到 SYSWOW64,所以依旧可以认为该 Dll 存在 System32 目录下。
[解决办法]
还有一种方法:

1 用安装包将一个 DLL_Path.ini 之类的文件复制到可执行文件目录下,或其他指定的路径。

2 软件启动后,读此文件,获取路径,并动态加载 DLL(例子如下):


Private Declare Function FreeLibrary Lib “kernel32″ (ByVal hLibModule As Long) 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 Command1_Click()
On Error Resume Next
Dim lb As Long, pa As Long
‘以 text.dll 为例,设 text.dll 功能跟 user32.dll 完全相同。
lb = LoadLibrary(DLL_Path & “\text.dll”)
‘取得 text.dll 中 SetWindowTextA 函数的地址
pa = GetProcAddress(lb, “ExploreMap”)
‘调用 SetWindowTextA 函数过程
pa = CallWindowProc(pa, ByVal 0&, ByVal 0&, ByVal 0&, ByVal 0&)
‘释放…
FreeLibrary lb
Me.Caption = pa
End Sub 


不过,我觉得还是放在缺省路径比较好。

热点排行