我有使用Runtime包构建的Delphi应用程序.exe。我需要将exe和其他bpls / dll存储在单独的(相对路径)文件夹中。 比如,.exe将在一个文件夹中,所有其他运行时包在另一个文件夹中包含dll / bpls。怎么做到这一点? 如果我在另一台没有安装delphi的机器上执行此操作,则会出现所需包的常见错误。
答案 0 :(得分:2)
在启用运行时软件包的情况下编译EXE时,必须将所有使用过的BPL文件与EXE一起部署。
如果EXE在编译时与BPL静态链接,则它们必须存在,操作系统可以在加载EXE时,在实际运行之前找到它们。您必须将BPL放在与EXE相同的文件夹中,或放在系统的import SimpleSchema from 'simpl-schema';
SimpleSchema.extendOptions(['autoform']);
Organizations = new Mongo.Collection('organizations');
Organizations.allow({
insert: function(userId){
return !!userId;
},
update: function(userId, doc){
return !!userId;
}
});
OrganizationSchema = new SimpleSchema ({
organization: {
label: "Organization Name",
type: String
},
members: {
type: Array
},
"members.$": Object,
"members.$.name": String,
"members.$.role": String,
inOrganization: {
type: Boolean,
defaultValue: true,
autoform: {
type: 'hidden'
}
},
createdAt: {
type: Date,
label: "CreatedAt",
autoform: {
type: "hidden"
},
autoValue: function() {
return new Date();
}
}
});
Meteor.methods({
deleteOrganizations: function(id) {
Organizations.remove(id);
}
});
SimpleSchema.debug = true;
Organizations.attachSchema(OrganizationSchema);
环境变量中包含的文件夹中。
如果EXE没有静态链接到BPL,并且它们在运行时使用RTL的LoadPackage()
函数由EXE代码加载,那么最好的选择是在加载时使用绝对路径。如果这不是一个选项,并且您必须使用相对路径,那么您可以使用SetDllDirectory()
或AddDllDirectory()
将BPL文件夹添加到操作系统搜索路径,然后再调用PATH
。
阅读有关Windows在运行时如何定位DLL的MSDN文档(BPL只是具有内置Delphi RTL支持的DLL):