论坛风格切换切换到宽版
  • 9703阅读
  • 6回复

[求助] NSIS System::Call调用路径含括号的DLL的问题 [复制链接]

上一主题 下一主题
离线溪流
 

发帖
565
金钱
-10380
威望
-1038
只看楼主 倒序阅读 0 发表于: 2010-10-22
我在64位系统下,把文件装到了 C:\Programs Files (x86)\ ... 下
InstallDir "$PROGRAMFILES\${COMPANY}\${PRODUCT}"

然后要调用此目录下的一个DLL中的一个函数。
我不知道 System::Call 下怎么带全路径去调用 DLL,System插件的文档中始终没有提及,所有的例子都没带路径的。
我尝试使用 System::Call "$INSTDIR\Foo.dll::Bar(i 1)"
32位下,能成功;64位下失败,函数没进去。
然后尝试了下 System::Call "C:\xxx (x86)\Foo.dll::Bar(i 1)",也是失败。

请问 System::Call 如何指定路径调用某个 DLL?
先谢过了~
因为用纸过大不利环保,2009年6月1日起,禁止使用纸质材料擦屁股,提倡公民养成不擦屁股或自带可重用抹布的习惯。违者最高可处以菊爆。
离线溪流

发帖
565
金钱
-10380
威望
-1038
只看该作者 1 发表于: 2010-10-22
或者,有谁知道它的默认搜索路径吗?
因为用纸过大不利环保,2009年6月1日起,禁止使用纸质材料擦屁股,提倡公民养成不擦屁股或自带可重用抹布的习惯。违者最高可处以菊爆。
离线溪流

发帖
565
金钱
-10380
威望
-1038
只看该作者 2 发表于: 2010-10-22
貌似 OutPath 在其搜索路径中
我庸人自扰了~~
因为用纸过大不利环保,2009年6月1日起,禁止使用纸质材料擦屁股,提倡公民养成不擦屁股或自带可重用抹布的习惯。违者最高可处以菊爆。
离线550771955

发帖
13
金钱
60
威望
6
只看该作者 3 发表于: 2010-11-02
正常应该是楼上所说,用 SetOutPath 指定即可:
SetOutPath $INSTDIR
System::Call "Foo::Bar(i1)"
如果说 32 位成功而 64 位不成功,原因未知且显然与你标题相悖。

离线溪流

发帖
565
金钱
-10380
威望
-1038
只看该作者 4 发表于: 2010-11-03
引用第3楼550771955于2010-11-02 00:48发表的  :如果说 32 位成功而 64 位不成功,原因未知且显然与你标题相悖。


别那么显然,谢谢。64位不成功是因为他解析参数的时候把路径中的 (x86) 当成参数列表了。
因为用纸过大不利环保,2009年6月1日起,禁止使用纸质材料擦屁股,提倡公民养成不擦屁股或自带可重用抹布的习惯。违者最高可处以菊爆。
离线550771955

发帖
13
金钱
60
威望
6
只看该作者 5 发表于: 2010-11-08
>>我尝试使用 System::Call "$INSTDIR\Foo.dll::Bar(i 1)"
>>32位下,能成功;64位下失败,函数没进去。
你既然提到了以上方法可以,那就说明 SetOutPath 方法是正确的,只不过是 32 位可以 64 位不可以。那么后面还用那个带括号的路径干啥我就不懂,因为你的标题“括号问题”上面你自己都实践通过。所以归根到底你是在问 64 位为什么不行,而不是问括号问题。我说你问的内容与标题不服有何不妥?

>>如果说 32 位成功而 64 位不成功,原因未知且显然与你标题相悖。
因为你前边都写了 SeOutPath 可行。所以我这句话前提是你使用 SetOutPath 指定路径了。
[ 此帖被550771955在2010-11-08 13:50重新编辑 ]
离线溪流

发帖
565
金钱
-10380
威望
-1038
只看该作者 6 发表于: 2010-11-20
引用第5楼550771955于2010-11-08 13:40发表的  :>>我尝试使用 System::Call "$INSTDIR\Foo.dll::Bar(i 1)">>32位下,能成功;64位下失败,函数没进去。你既然提到了以上方法可以,那就说明 SetOutPath 方法是正确的,只不过是 32 位可以 64 位不可以。那么后面还用那个带括号的路径干啥我就不懂,因为你的标题“括号问题”上面你自己都实践通过。所以归根到底你是在问 64 位为什么不行,而不是问括号问题。我说你问的内容与标题不服有何不妥?>>如果说 32 位成功而 64 位不成功,原因未知且显然与你标题相悖。.......


靠,,哥好久没有遇到你这样纠结的人了,哥跟你纠结到底
1、第一帖,32位行64位不行,这是现象;与路径中的 (x86) 有关,这是我的推断以及测试结论。(这个时候我一直用 "X:\xxx\xxx.dll::foo()" 的形式来用的我以为指定路径了,直到发现此问题我才直到如此指定搜索路径是有问题的。)
2、第三帖,我发现SetOutPath可以把那个路径变成当前路径。于是没问题了。

然后你跳过来跟着来复述一句当然可以的、欢迎的。只不过什么标题内容不符合,典型回帖不看贴,把一楼看懂吧。
因为用纸过大不利环保,2009年6月1日起,禁止使用纸质材料擦屁股,提倡公民养成不擦屁股或自带可重用抹布的习惯。违者最高可处以菊爆。