应用程序和COM库不在同一个目录下,但是COM库依赖于另一个C#的库。

 

#using <mscorlib.dll>
#using <System.dll>
#using <System.Xml.dll>


ref class AssemblyResolveProxy
{
public:
 AssemblyResolveProxy() {
  System::AppDomain^ currentDomain = System::AppDomain::CurrentDomain;
  currentDomain->AssemblyResolve += gcnew System::ResolveEventHandler(this, &AssemblyResolveProxy::currentDomain_AssemblyResolve);
 }

private:
 System::Reflection::Assembly^ currentDomain_AssemblyResolve(System::Object^ sender, System::ResolveEventArgs^ args)
 {
  System::String^ myPath = System::Reflection::Assembly::GetExecutingAssembly()->Location;
  System::String^ myDir = System::IO::Path::GetDirectoryName(myPath);
  System::String split[] = nullptr;
  //System::String^ symbol = ",";
  //System::Char cSymbol[] = symbol->ToCharArray();
  //System::String split[]  = args->Name->Split(cSymbol); // TODO: is there a better way?  AssemblyName.Parse() doesn't exist
  //System::String^ simpleAssemblyName = split[0];

  System::String^ pAssemplyInfo = args->Name;
  cli::array<System::String^> ^tempItems = pAssemplyInfo->Split(',');

  System::String^ pAssemplyName = tempItems[0];

  System::String^ resolveAssemblyPath = System::IO::Path::Combine(myDir, (gcnew System::Text::StringBuilder(pAssemplyName))->Append(/*MSG0*/".dll")->ToString());

  if (System::IO::File::Exists(resolveAssemblyPath))
   return System::Reflection::Assembly::LoadFrom(resolveAssemblyPath);
  return nullptr;
 }
};

class AssemblyResolver
{
 gcroot<AssemblyResolveProxy^> m_AssemblyResolve;
public:
 AssemblyResolver()
 {
  m_AssemblyResolve = gcnew AssemblyResolveProxy();
 }
};

static AssemblyResolver m_assemblyResolver;

 

转载于:https://www.cnblogs.com/livenn/archive/2009/11/05/1596755.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值