Ошибка LNK2019 при попытке проверить dll

0

Я работаю с приложением, которое появляется (только что началось несколько недель назад, поэтому я все еще изучаю старые приложения), которое будет создано на C, и моя компания хочет использовать эту возможность для вызова внешней библиотеки DLL для расширения некоторых новых функциональность. Для этого я начал работать над своей POC, которая является первым двумя файлами ниже. Единственной спецификацией, которую мы получили, было то, что dll пришлось экспортировать следующую функцию: extern int __stdcall TestMethod_LoadCustomer(const char * name, char * id); Я попытался реализовать это следующим образом:

TestDLL.h

#define TestDLL_API __declspec(dllexport)
namespace TestDLL
{
        class TestDLL
        {
        public:
                static TestDLL_API int TestMethod_LoadCustomer(const char* name, char* id);
        };
}

TestDLL.cpp

// TestDLL.cpp : Defines the exported functions for the DLL application.
//  
#include "stdafx.h"
#include "TestDLL.h"
#include <string.h>

extern "C" int __declspec(dllexport) __stdcall  TestMethod_LoadCustomer(const char* name, char* id)
{
  if (strlen(name) <= 8) {
    strcpy(id, name);           // name contains customer id
  } else {
    id[0] = 0;                  // Customer not found
  }
  return 0;
}

Эти два файла скомпилированы. Проблема возникает, когда я пытаюсь протестировать эту DLL с помощью отдельного небольшого консольного приложения, показанного здесь: RunTEST.cpp

// RunTest.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include "TestDLL.h"

using namespace std;
int _tmain()
{
        char* id= "";
        TestDLL::TestDLL::TestMethod_LoadCustomer("77777", id);
        cout << id;
        cin >> id;
        return 0;
}

Все, что я ищу, это возможность передать строку символов в вызов TestMethod_LoadCustomer() и добавить ее в поле id.

Когда я на самом деле пытаюсь построить это решение, я получаю следующую ошибку:

"ошибка LNK2019: неразрешенный внешний символ" public: static int __cdecl TestDLL :: TestDLL :: TestMethod_LoadCustomer (char const *, char *) "(? TestMethod_LoadCustomer @TestDLL @1 @SAHPBDAD @Z), на который ссылается функция _wmain"

Я предполагаю, что это имеет какое-то отношение к тому, как я пытаюсь ссылаться на него в своем клиентском приложении, но я не уверен. Я посмотрел на другие ошибки LNK2019 на StackOverflow, но ни одно из этих решений, похоже, не работало здесь, я неправильно их реализовал. Может ли кто-нибудь помочь мне избавиться от этого сообщения об ошибке?

  • 2
    Разве вы не пропустили TestDLL:: before TestMethod_LoadCustomer в TestDLL.cpp?
  • 0
    #define TestDLL_API __declspec(dllexport) Это должно быть __declspec (dllimport) для любого exe-файла, который использует dll и __declspec (dllexport) для самой dll.
Показать ещё 2 комментария
Теги:
linker-errors

2 ответа

0
Лучший ответ

В файле TestDLL.cpp отсутствуют две вещи:

1) Пространство имен TestDLL.

2) TestDLL :: перед именем метода.

// TestDLL.cpp : Defines the exported functions for the DLL application.
//  
#include "stdafx.h"
#include "TestDLL.h"
#include <string.h>

namespace TestDLL {
extern "C" int __declspec(dllexport) __stdcall  TestDLL::TestMethod_LoadCustomer(const char* name, char* id)
{
  if (strlen(name) <= 8) {
    strcpy(id, name);           // name contains customer id
  } else {
    id[0] = 0;                  // Customer not found
  }
  return 0;
}
}
  • 0
    Внесение этого изменения фактически добавило новую ошибку («ошибка C2373:« TestDLL :: TestDLL :: TestMethod_LoadCustomer »: переопределение; модификаторы другого типа») вместе с LKN2019. Может ли это быть связано с комментарием drescherjm?
  • 0
    @cdd в версии заголовка отсутствует ключевое слово / модификатор __stdcall , а также extern "C" инструкция extern "C" .
Показать ещё 2 комментария
0

Определяя функцию в TestDLL.cpp, вы не отметили, что функция является членом класса TestDLL.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню