Возникли проблемы при импорте функции из DLL C ++ ошибка LNK 2019

Я пытаюсь написать и протестировать DLL-файл на C ++, который я могу вызывать всякий раз, когда мне нужен доступ на уровне файловой системы. В настоящее время у меня огромная головная боль при попытке доступа к методам в этой DLL в C ++. Как ни странно, мне удалось без особых проблем вызвать код в отдельной программе на C #, но я хочу получить представление о том, как dll-взаимодействие работает в C ++.

И это .cpp для моего фиктивного исполняемого файла, который должен вызывать только мой тестовый метод «newMain».

// dummy.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"#include <iostream>
#include <string>
//#pragma comment(lib,"visa32.lib")
#pragma message("automatic link to adsInterface.dll")
#pragma message(lib, "adsInterface.lib"
extern "C" int __stdcall newMain();

int _tmain(int argc, _TCHAR* argv[])
{
newMain();
std::string i;
std::cin >> i
return 0;
}

Проблема в том, что при запуске я получаю эту ошибку:

error LNK2019: unresolved external symbol _newMain@0 referenced in function _wmain
error LNK1120: 1 unresolved externals

Вот .h для adsInterface:

// adsInterface.h

#ifndef ADSINTERFACE_H
#define ADSINTERFACE_H

/* //save this for later i have no clue how this really works.
#ifdef ADSAPI_EXPORTS
#define ADSAPI __declspec(dllexport)
#else
#define ADSAPI __declspec(dllexport)
#endif
*/

namespace ADSInterface
{
//test method. should print to console.
__declspec(dllexport) int __stdcall newMain();

void hello();
}
#endif

и вот мой .cpp для adsInterface:

// adsInterface.cpp : Defines the exported functions for the DLL application.
//

#include "stdafx.h"#include "adsInterface.h"#include <iostream>

namespace ADSInterface
{
/* this is where the actual internal class and other methods will go */

void hello()
{
std::cout << "hello from the DLL!" << std::endl;
}__declspec(dllexport) int __stdcall newMain()
{
hello();
return 0;
}
}

Я также включу файл .def, который использовал при компиляции dll:

; adsInterface.def - defines exports for adsInterface.dll

LIBRARY ADSINTERFACE
;DESCRIPTION 'A C++ dll that allows viewing/editing of alternate data streams'

EXPORTS
newMain @1

Как ни странно, я смог импортировать метод в C # с этой строкой (мне не нужно было также включать файл .lib):

[DllImport("./adsInterface.dll")] private static extern void newMain();

И он побежал, когда я назвал это нормально:

newMain();

Я читал много разных руководств о том, как импортировать функции dll, и я дошел до того, что мне кажется, что я просто комбинирую различные способы импорта между языками и просто путаюсь. Если кто-нибудь сможет дать некоторое представление о том, как я должен импортировать dll-методы в C ++, это было бы очень полезно.

0

Решение

удалить это объявление:

extern "C" int __stdcall newMain();

и вызвать ADSInterface :: newMain () из _tmain.

В опубликованном коде вы не определили ничего, соответствующего этому объявлению, не так ли?

Или сделайте реализацию, вызывающую другую, или перетащите ее из пространства имен в глобальное.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]