【发布时间】:2014-03-05 01:57:33
【问题描述】:
我有一个 C# 托管库 (dll),它正在调用 C++/CLI (w/ /clr) 库,以便调用一些本机库函数。
我想要做的是 embed native dll's 在 C++/CLI libary/dll 中(为了制作一个简单的库实体),然后动态加载它们(本机 dll)。
我已经能够成功地将它们嵌入到 C++/CLI 库中,但我不知道如何使用这些数据来动态加载它们。我尝试使用(AssemblyResolve 和 Assembly.Load),但在尝试加载 C++/CLI 库返回“无法加载文件或程序集”错误之前,我没有机会使用它。
我已经阅读了关于程序集初始化程序的信息(看起来有点像 dllmain)。我需要设置一个然后加载嵌入式程序集吗?
更新:我已经编写了下面的代码,将 DLL 从“资源”中拉出并将其转储到文件中,这似乎工作正常。
{
Assembly ^ CurrentAssembly = Assembly::GetExecutingAssembly();
array<String^> ^ ResourceNames = CurrentAssembly->GetManifestResourceNames();
String^ BaseDir = AppDomain::CurrentDomain->BaseDirectory;
for (int i = 0; i < ResourceNames->Length; i++)
{
if ( ResourceNames[i]->EndsWith(".dll") )
{
Stream^ stream = CurrentAssembly->GetManifestResourceStream(ResourceNames[i]);
if ( stream != nullptr )
{
array<Byte^> ^ assemblyData = gcnew array<Byte^>(stream->Length);
FileStream^ fileStream = File::Create(BaseDir + ResourceNames[i]);
stream->CopyTo(fileStream);
fileStream->Close();
}
}
}
}
【问题讨论】:
标签: .net c++-cli embed native .net-assembly