公司生产带有以太网连接器的设备。我有一个他们的设备,他们给了我一个.lib文件和一些.h文件,所以我可以连接和他们的设备通信。工作正常,我很高兴。 然后该公司生产了他们设备的新版本。我也有这个更新的设备,他们又给了我一些文件,所以我可以连接并与之通信:这次是.lib文件,.dll文件和一些.h文件。
背景太多了。现在,问题是:
我在MS Visual C ++ 6.0中编写了一个简单的测试应用程序,看看当我尝试使用旧接口连接到新设备时会发生什么:提供的connect()方法(使用旧的.lib文件)立即返回0 (无法连接)。有道理,我同意! 但是,当我将.lib文件包装在.dll文件中并再次尝试相同的场景时,我没有立即获得结果,需要42秒才能获得0结果! 当我尝试连接到旧设备时,包装器工作正常,完全没问题。
这是我必须在.dll文件中包装.lib文件的第一个项目(我这样做,所以我可以在C#中使用它),所以我对这个主题不太了解。我所知道的是,我将原始方法调用的值传递给包装器......怎么会出现这样的延迟?它必须发生在Wrapping的某个地方,但我不知道。网络不应该是问题,因为没有包装我立即得到结果。也许关于线程或DLL的东西?
我希望有人能在这里启发我......
我没有发布任何特定代码,因为我不知道这里有什么相关内容。如果您需要更多信息,请告诉我们!
修改 在C#中,我有一个类MyDLLImport:
class MyDLLImport
{
[DllImport("Old_Interface_MSVC++GeneratedDLL.dll")]
public static extern int Connect();
[DllImport("Old_Interface_MSVC++GeneratedDLL.dll")]
public static extern int Disconnect();
...
}
在另一个C#类中,我直接访问这些方法,如:
MyDLLImport.Connect();
.lib和.h文件包含在Old_Interface_MSVC ++ GeneratedDLL.dll文件中,如下所示:
Old_Interface_MSVC ++ GeneratedDLL.cpp:
#include "stdafx.h"
#include "Old_Interface_MSVC++GeneratedDLL_Class.h"
#include "Old_Interface_MSVC++GeneratedDLL.h"
#include <string.h>
#include <iostream>
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
ALibClass MyDLL::client;
int MyDLL::Connect()
{
int ret;
ret = MyDLL::client.Connect();
if(!ret)
{
std::cerr << "Could not connect" << std::endl;
return false;
}
return true;
}
void MyDLL::Disconnect()
{
MyDLL::client.Disconnect();
}
...
/////////////////////////////////
// exported functions
int Connect()
{
return MyDLL::Connect();
}
void Disconnect()
{
MyDLL::Disconnect();
}
然后,有前一个.cpp文件的头文件,Old_Interface_MSVC ++ GeneratedDLL.h:
#ifdef MYDLL_EXPORTS
#define MYDLL_API __declspec(dllexport)
#else
#define MYDLL_API __declspec(dllimport)
#endif
// added by myself to prevent export warnings
#pragma warning( disable: 4251 )
/////////////////////////////////////////////
//exported general methods
extern "C" MYDLL_API int Connect();
extern "C" MYDLL_API void Disconnect();
...
最后是类头文件Old_Interface_MSVC ++ GeneratedDLL_Class.h:
#include "lib_header_file.h"
class MyDLL
{
private:
static ALibClass client;
public:
static int Connect();
static void Disconnect();
...
}
我希望我已经添加了所有相关的代码部分。如果您需要更多信息,请告诉我们!