[疑难] xpcom.dll为何不能正常加载?

qiezi 2007-04-11
就这一行代码还抛出异常,错误码是1114,可以肯定它找到了这个DLL,换成一个不存在的名字时,没有异常提示,错误码是126。我的当前路径是在xulrunner路径下,换成user32.dll就可以正常加载。

图片连接:


有人能解释这个吗?
import std.loader;

void main()
{
	scope auto dll = new ExeModule(r"xpcom.dll");
	//dll.getSymbol("NS_InitXPCOM2");
}
qiezi 2007-04-11
惨淡,原来是这个:
引用

#define ERROR_DLL_INIT_FAILED            1114L

不过依旧不知道如何解决。
oldrev 2007-04-11
可能这个 DLL 用到了 C 运行时需要初始化?
试试生成一个导入库隐式加载?


loader没文档,估计是已经放弃的了。
qiezi 2007-04-11
隐式加载不成功,测试了一个最简单的方法也不行,我才试试动态加载的。

本来想在Linux下做,gentoo迟迟不发布,2006.1安装没成功。ubuntu安装后iso9660/vfat/ntfs都不认了,没办法继续安装g++和其它工具。只好在windows上测试,看来不顺啊
oldrev 2007-04-11
qiezi 写道
隐式加载不成功,测试了一个最简单的方法也不行,我才试试动态加载的。

本来想在Linux下做,gentoo迟迟不发布,2006.1安装没成功。ubuntu安装后iso9660/vfat/ntfs都不认了,没办法继续安装g++和其它工具。只好在windows上测试,看来不顺啊


Ubuntu 不认文件系统?我的 6.10 没什么问题啊。ntfs 都是用的 ntfs-3g。直接 apt-get 就搞定了。
qiezi 2007-04-11
这个是隐式加载的:

import nsXPCOM;
import nsIFile;
import nsIDirectoryServiceProvider;
import nsIServiceManager;

void main(char[][] args)
{
	nsIServiceManager serviceManager = null;
	nsIFile binDirectory = null;
	nsIDirectoryServiceProvider appFileLocationProvider = null;

	if (args.length > 1)
		NS_InitXPCOM2(&serviceManager, binDirectory, appFileLocationProvider);
}

这里不传递参数(这时args.length == 1)也无法启动,应该也是加载DLL失败。
h_rain 2007-04-11
在vc中试过吗?
xpcom.dll好像还需要同时加载其他的dll吧,所有的dll都在吗?
qiezi 2007-04-11
都在一起的,xulrunner可以跑起来,我的程序就放在xulrunner同一文件夹下。

VC刚好也坏了,所以还没测试。。
qiezi 2007-04-11
oldrev 写道
qiezi 写道
隐式加载不成功,测试了一个最简单的方法也不行,我才试试动态加载的。

本来想在Linux下做,gentoo迟迟不发布,2006.1安装没成功。ubuntu安装后iso9660/vfat/ntfs都不认了,没办法继续安装g++和其它工具。只好在windows上测试,看来不顺啊


Ubuntu 不认文件系统?我的 6.10 没什么问题啊。ntfs 都是用的 ntfs-3g。直接 apt-get 就搞定了。

不知道安装出了什么问题,几个文件系统都没装上,光驱也用不了:
引用

root@lijie-laptop:~# apt-get install g++
正在读取软件包列表... 完成
正在分析软件包的依赖关系树      
Reading state information... 完成     
将会安装下列额外的软件包:
  g++-4.1 libstdc++6-4.1-dev
建议安装的软件包:
  gcc-4.1-doc lib64stdc++6 libstdc++6-4.1-doc
下列【新】软件包将被安装:
  g++ g++-4.1 libstdc++6-4.1-dev
共升级了 0 个软件包,新安装了 3 个软件包,要卸载 0 个软件包,有 4 个软件未被升级。
需要下载 0B/4194kB 的软件包。
解压缩后会消耗掉 16.5MB 的额外空间。
您希望继续执行吗?[Y/n]y
更换介质:请把标有
“Ubuntu 6.10 _Edgy Eft_ - Release i386 (20061025)”
的碟片插入驱动器“/cdrom/”再按回车键

没办法了,有什么办法让它从网上下载,不用光驱吗?
qiezi 2007-04-11
啊哈,找到了,软件包管理器里面设置一下就行了。希望顺利。。
Global site tag (gtag.js) - Google Analytics