DLL包装器方法返回延迟

时间:2013-05-06 15:03:42

标签: c# c++ dll wrapper

公司生产带有以太网连接器的设备。我有一个他们的设备,他们给了我一个.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();

    ...
}

我希望我已经添加了所有相关的代码部分。如果您需要更多信息,请告诉我们!

0 个答案:

没有答案