创建包含第三方SDK的c ++ DLL

时间:2015-07-08 07:14:34

标签: c++ dll linker dllimport dllexport

我试图通过创建一个c ++ dll并在Unity(c#)中调用它来获得第三方重建库ReconstructMe。

我已经使用提供的dll工作了,但调用非托管函数调用会在多个函数的每次更新时达到性能,例如:

我正在调用的每个更新下面的必要电话:

reme_sensor_grab
reme_sensor_prepare_images
reme_sensor_track_position
reme_sensor_update_volume
reme_surface_generate 

为了优化,我的想法是如果我可以创建一个包含所有上述函数的新DLL,调用和此DLL导入函数将从unity(c#)每次更新调用一次,或者可以只调用一次并从回调中获取数据。

我只是使用下面的代码来检查我是否能够让它工作,不幸的是我得到了LNK2019:

RemeDLL.obj : error LNK2019: unresolved external symbol __imp_reme_context_create referenced in function “private: void __cdecl RemeDLL::StartScan(void)” (?StartScan@RemeDLL@@AEAAXXZ)
1>c:\Projects\RemeDLL\x64\Debug\RemeDLL.dll : fatal error LNK1120: 1 unresolved externals

#include <iostream>
#include <reconstructmesdk/reme.h>
using namespace std;

class RemeDLL
{
    __declspec(dllexport) void StartScan()
    {
        // Create a new context
        reme_context_t context;
        reme_context_create(&context);
        //...
    }
};

以下是SDK中的定义:

typedef struct _reme_context* reme_context_t;

LIBRECONSTRUCTMESDK_LIBRARY_INTERFACE
reme_error_t reme_context_create(reme_context_t *c);

#define LIBRECONSTRUCTMESDK_LIBRARY_INTERFACE __declspec(dllimport)

有人可以建议或指点我该如何解决这个问题?我需要某种层来连接dll首先导入然后再调用dll导出函数,请指教。谢谢。

1 个答案:

答案 0 :(得分:-1)

  1. 将重新构建inclib文件夹的路径添加到项目属性中;
  2. 在您的源代码中添加行#pragma comment(lib, "LibReconstructMeSDK.lib")