【发布时间】:2020-08-30 14:33:38
【问题描述】:
我正在创建一个从加载 32 位非托管 dll 以在 64 位环境中执行的包装器。所以我的方法使用了这个LegacyWrapper
[LegacyDllImport("ste.dll")]
public interface INativeMethods : IDisposable
{
[LegacyDllMethod(CallingConvention = CallingConvention.Winapi)]
IIntPtr ste_init_with_environment_info(string dirLocation, string language);
}
我调用这个方法如下
public IWrapperConfig Configuration
{
get
{
return _configuration ??= WrapperConfigBuilder.Create().TargetArchitecture(TargetArchitecture.X86).Build();
}
}
using var client = WrapperProxyFactory<INativeMethods>.GetInstance(Configuration);
_steHandle = client.ste_init_with_environment_info(steHomeDirectory, SystemProperties());
它似乎毫无例外地工作,但是。结果,当我调用该函数时,我得到了0x0000000000000000,它应该类似于0x0186ad58 是什么导致了问题?
更新
当我看到 LagacyWrapper 的源代码时,使用System.Runtime.Serialization.IFormatter 看到下面的序列化和反序列化
public void SendCallRequest(CallData callData)
{
_formatter.Serialize(_pipe, callData);
}
public CallResult ReceiveCallResponse()
{
CallResult callResult = (CallResult)_formatter.Deserialize(_pipe);
if (callResult.Exception != null)
{
throw callResult.Exception;
}
return callResult;
}
【问题讨论】:
标签: c# wrapper 32bit-64bit dllimport