在网上找了下,使用DllImport加上DLL的绝对路径,尝试了下,可行。但是设置绝对路径麻烦很大,很不方便使用……如程序如果更换了位置,或者是以后别人来部署这个程序,不知道这点的话,又会折腾很久。有没有别的办法可以解决这个问题,为什么一定要加上绝对路径呢?
14 个解决方案
#1
DllImport里不要设置路径,直接加载***.dll,这个dll保持跟你程序的exe在同一个目录就可以了
#2
说明你的dll没有放到exe同目录下来
#3
刚刚发现,把项目从AnyCPU改成x86之后,就不报错了……蛋疼。
#4
放在同一个目录了,刚刚发现问题的真正原因了,因为我之前项目都是用AnyCPU的,改成了x86就可以正常使用哪个DLL了。
#5
我每次都是AnyCPU,没问题啊
#6
吧DLL添加到项目然后属性,每次都重新生成
#7
开发64位时,选择anycpu,import调用dll没有类似问题
应该不是这里的原因吧
不过问题解决了就行
#8
一般是dll和exe没在一个目录引起这种问题
#9
Any CPU会让程序在32位系统下以32位运行,64位系统下以64位运行(如果选了Prefer 32-bit则会在32位下运行)。
x86在32位和64位系统下都以32位运行。x64在32位系统不能运行,在64位系统以64位运行。
32位进程只能加载32位dll,64位进程只能加载64位dll。
所以如果要DllImport非系统的dll,就不要用Any CPU,除非自己手动写代码选择加载dll的正确版本,否则会有问题的。
windows自带的dll没问题是因为它64位的版本在C:\Windows\system32下,32位的版本在C:\Windows\SysWOW64下,系统会自动选择合适的dll。
x86在32位和64位系统下都以32位运行。x64在32位系统不能运行,在64位系统以64位运行。
32位进程只能加载32位dll,64位进程只能加载64位dll。
所以如果要DllImport非系统的dll,就不要用Any CPU,除非自己手动写代码选择加载dll的正确版本,否则会有问题的。
windows自带的dll没问题是因为它64位的版本在C:\Windows\system32下,32位的版本在C:\Windows\SysWOW64下,系统会自动选择合适的dll。
#10
Any CPU会让程序在32位系统下以32位运行,64位系统下以64位运行(如果选了Prefer 32-bit则会在32位下运行)。
x86在32位和64位系统下都以32位运行。x64在32位系统不能运行,在64位系统以64位运行。
32位进程只能加载32位dll,64位进程只能加载64位dll。
所以如果要DllImport非系统的dll,就不要用Any CPU,除非自己手动写代码选择加载dll的正确版本,否则会有问题的。
windows自带的dll没问题是因为它64位的版本在C:\Windows\system32下,32位的版本在C:\Windows\SysWOW64下,系统会自动选择合适的dll。
好。
#11
Any CPU会让程序在32位系统下以32位运行,64位系统下以64位运行(如果选了Prefer 32-bit则会在32位下运行)。
x86在32位和64位系统下都以32位运行。x64在32位系统不能运行,在64位系统以64位运行。
32位进程只能加载32位dll,64位进程只能加载64位dll。
所以如果要DllImport非系统的dll,就不要用Any CPU,除非自己手动写代码选择加载dll的正确版本,否则会有问题的。
windows自带的dll没问题是因为它64位的版本在C:\Windows\system32下,32位的版本在C:\Windows\SysWOW64下,系统会自动选择合适的dll。
总结全面
#12
使用第三方dll之前,先了解一下对方的dll是否只能在x86下才能正常引用。
#13
把第三方DLL文件放到你的程序的根目录==>bin文件夹==>Debug文件夹 下,然后程序调用的地方就不用写绝对路径或相对路径,只要写文件名+后缀名 就可以。 如 xxxx.dll
#14
Dll放在bin\debug目录下
#1
DllImport里不要设置路径,直接加载***.dll,这个dll保持跟你程序的exe在同一个目录就可以了
#2
说明你的dll没有放到exe同目录下来
#3
刚刚发现,把项目从AnyCPU改成x86之后,就不报错了……蛋疼。
#4
说明你的dll没有放到exe同目录下来
放在同一个目录了,刚刚发现问题的真正原因了,因为我之前项目都是用AnyCPU的,改成了x86就可以正常使用哪个DLL了。
#5
我每次都是AnyCPU,没问题啊
#6
吧DLL添加到项目然后属性,每次都重新生成
#7
说明你的dll没有放到exe同目录下来
放在同一个目录了,刚刚发现问题的真正原因了,因为我之前项目都是用AnyCPU的,改成了x86就可以正常使用哪个DLL了。
开发64位时,选择anycpu,import调用dll没有类似问题
应该不是这里的原因吧
不过问题解决了就行
#8
一般是dll和exe没在一个目录引起这种问题
#9
Any CPU会让程序在32位系统下以32位运行,64位系统下以64位运行(如果选了Prefer 32-bit则会在32位下运行)。
x86在32位和64位系统下都以32位运行。x64在32位系统不能运行,在64位系统以64位运行。
32位进程只能加载32位dll,64位进程只能加载64位dll。
所以如果要DllImport非系统的dll,就不要用Any CPU,除非自己手动写代码选择加载dll的正确版本,否则会有问题的。
windows自带的dll没问题是因为它64位的版本在C:\Windows\system32下,32位的版本在C:\Windows\SysWOW64下,系统会自动选择合适的dll。
x86在32位和64位系统下都以32位运行。x64在32位系统不能运行,在64位系统以64位运行。
32位进程只能加载32位dll,64位进程只能加载64位dll。
所以如果要DllImport非系统的dll,就不要用Any CPU,除非自己手动写代码选择加载dll的正确版本,否则会有问题的。
windows自带的dll没问题是因为它64位的版本在C:\Windows\system32下,32位的版本在C:\Windows\SysWOW64下,系统会自动选择合适的dll。
#10
Any CPU会让程序在32位系统下以32位运行,64位系统下以64位运行(如果选了Prefer 32-bit则会在32位下运行)。
x86在32位和64位系统下都以32位运行。x64在32位系统不能运行,在64位系统以64位运行。
32位进程只能加载32位dll,64位进程只能加载64位dll。
所以如果要DllImport非系统的dll,就不要用Any CPU,除非自己手动写代码选择加载dll的正确版本,否则会有问题的。
windows自带的dll没问题是因为它64位的版本在C:\Windows\system32下,32位的版本在C:\Windows\SysWOW64下,系统会自动选择合适的dll。
好。
#11
Any CPU会让程序在32位系统下以32位运行,64位系统下以64位运行(如果选了Prefer 32-bit则会在32位下运行)。
x86在32位和64位系统下都以32位运行。x64在32位系统不能运行,在64位系统以64位运行。
32位进程只能加载32位dll,64位进程只能加载64位dll。
所以如果要DllImport非系统的dll,就不要用Any CPU,除非自己手动写代码选择加载dll的正确版本,否则会有问题的。
windows自带的dll没问题是因为它64位的版本在C:\Windows\system32下,32位的版本在C:\Windows\SysWOW64下,系统会自动选择合适的dll。
总结全面
#12
使用第三方dll之前,先了解一下对方的dll是否只能在x86下才能正常引用。
#13
把第三方DLL文件放到你的程序的根目录==>bin文件夹==>Debug文件夹 下,然后程序调用的地方就不用写绝对路径或相对路径,只要写文件名+后缀名 就可以。 如 xxxx.dll
#14
Dll放在bin\debug目录下