【发布时间】:2019-03-07 04:11:45
【问题描述】:
我有一个需要从 64 位 C# 应用程序访问的 32 位 dll(无源代码)。我已经阅读了this 的文章并查看了here 的相应代码。我也读过this 的帖子。 我不确定我问的问题是否正确,所以请帮助我。
有 3 个项目:dotnetclient、x86Library 和 x86x64。 x86x64 有 x86LibraryProxy.cpp 加载 x86library.dll 并调用 GetTemperature 函数:
STDMETHODIMP Cx86LibraryProxy::GetTemperature(ULONG sensorId, FLOAT* temperature)
{
*temperature = -1;
typedef float (__cdecl *PGETTEMPERATURE)(int);
PGETTEMPERATURE pFunc;
TCHAR buf[256];
HMODULE hLib = LoadLibrary(L"x86library.dll");
if (hLib != NULL)
{
pFunc = (PGETTEMPERATURE)GetProcAddress(hLib, "GetTemperature");
if (pFunc != NULL)
dotnetclient 调用 GetTemperature 函数并打印结果:
static void Main(string[] args)
{
float temperature = 0;
uint sensorId = 2;
var svc = new x86x64Lib.x86LibraryProxy();
temperature = svc.GetTemperature(sensorId);
Console.WriteLine($"temperature of {sensorId} is {temperature}, press any key to exit...");
如果我将所有项目构建为 x86 或 x64,这一切都有效。我得到的温度结果是20。但是,整个想法是使用 32 位 x86x64Lib.dll。这意味着dotnetclient 应该构建为 x64,x86Library 和 x86x64 构建为 x86,对吗?如果我这样做,我会得到-1。
我应该将x86Library 和x86x64 构建为x86 并将dotnetclient 构建为x64 吗?如果我这样做了,那么我得到-1 的问题是什么?
澄清 似乎提供的示例仅在客户端和服务器均以 32 位或 64 位构建时才有效。但当客户端构建为 64 位而服务器构建为 32 位时则不然。有人可以看看吗?
【问题讨论】:
标签: c# c++ dll com 32bit-64bit