C ++ dll使用dll中的方法

时间:2014-09-28 15:52:13

标签: c++ dll

我正在尝试使用简单的c ++程序来使用dll中的方法。我已经收到了各种各样的错误,因为我已经调整了代码并且大部分都被卡住了,就像下面发布的代码一样,“未定义引用”方法。下面的代码编译如下。

g++ -c testdll.cpp
g++ -shared -o testdll.dll testdll.o
g++ -o test test.cpp -L./ -ltestdll

错误

g++ -o test test.cpp -L./ -ltestdll
C:\Users\ROGERF~1\AppData\Local\Temp\cca9YhFn.o:test.cpp:(.text+0x53): undefined
 reference to `__imp__ZN7TestDLL9writeDataESs'
collect2.exe: error: ld returned 1 exit status

我不知道为什么目录C:\ Users \ ROGERF~1 \ AppData \ Local \ Temp \参与了这个过程。在我开始在头文件中使用Microsoft网站的代码之后出现了这一点。以前,我只是未定义引用'writeData'

testdll.cpp

#include <stdio.h>
#include <string>
using namespace std;

class TestDLL {
public:
    string data1;

    public: void writeData (string s) {
        printf ("%s \n", s.c_str());
    }
};

TestDLL.h

#ifndef TESTDLL_H
#define TESTDLL_H

#ifdef TRADITIONALDLL_EXPORTS
#define TRADITIONALDLL_API __declspec(dllexport)
#else
#define TRADITIONALDLL_API __declspec(dllimport)
#endif

#ifdef __cplusplus
extern "C"
{
#endif

class TestDLL {
    public:
       std::string data1;

    public:
        TRADITIONALDLL_API void writeData (std::string);
};
#ifdef __cplusplus
}
#endif
#endif // TESTDLL_H

TEST.CPP

#include <string>
#include "TestDLL.h"
using namespace std;
class TestDLL;
int 
main () {
  TestDLL testdll;
  testdll.writeData ("success");
} 

扩展说明:我把重点放在易于发布的内容上,希望有人能够轻松回答。在PC时代初期,我还是一名C程序员,但从那时起C ++或C都做不了多少。我已经成为一名Java程序员已经有一段时间了(还有网络内容)。现在,我正在处理一个可以使用dll扩展的现有程序,并且需要将dll连接到用Java编写的系统。我已经完成了JNI的第一步,所以我将Java连接到一个dll。但架构必须是:

现有C应用程序 - dll扩展 - 用于JNI的dll - Java系统

通过双向沟通。

1 个答案:

答案 0 :(得分:1)

如果将以下两行添加到testdll.cpp会发生什么:

#define TRADITIONALDLL_EXPORTS 1
#include "TestDLL.h"

我怀疑发生的事情是你没有这样做,所以GCC不知道用DLL导出链接编译TestDLL::writeData()