@MasterCopipaster

Как мне импортировать методы класса при компиляции dll С++11?

Здравствуйте, прошу показать мне как написать следующие задачу. Я успешно собрал dll файл, и вызвал из него функцию printing на данном этапе все работает, функция вызывается все ок.

Код:
Project2.h

#ifdef PROJECT2_EXPORTS
#define PROJECT2_API /*extern "C"*/ __declspec(dllexport)
#else
#define PROJECT2_API __declspec(dllimport)
#endif
PROJECT2_API void printing(char* pChar);


Project.cpp
// Project2.cpp : Defines the exported functions for the DLL application.
//

#include "stdafx.h"
#include "Project2.h"
#include "Header1.h"

PROJECT2_API void printing(char* pChar) {
	char a[] = "Example String";
	strcpy_s(pChar, strlen(a) + 1, a);
}

dllmain.cpp
// dllmain.cpp : Defines the entry point for the DLL application.
#include "stdafx.h"
#include "Header1.h"

int iParam;

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
		iParam = 7;
		break;
    case DLL_THREAD_ATTACH:
		iParam += 1;
		break;
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}

const int GetSomeParam() {
	return iParam;
}

Пример для быстрого воспроизводства для Visual St...

Я хочу написать для dll класс так что бы можно было вызывать методы в этом классе.

Project2.h

#ifdef PROJECT2_EXPORTS
#define PROJECT2_API /*extern "C"*/ __declspec(dllexport)
#else
#define PROJECT2_API __declspec(dllimport)
#endif
class xyz
{
private:
	int abc;
public:
	PROJECT2_API void printing(char* pChar) {
		char a[] = "Example String";
		strcpy_s(pChar, strlen(a) + 1, a);
		abc = 5;
	}

	PROJECT2_API int printing_int() { // return 5
		return abc;
	}
};


Методы для dll вызываются последовательно с начало printing потом printing_int свойство abc не должно изменятся между этими вызовами (во общем все как обычно) ожидается что printing_int вернет 5.

Я не знаю как можно сделать экспорт методов класса в dll - но я нашел по этой ссылке что можно… компиляция с новым Project2.h прошла успешно, однако при попытке вызвать printing из dll ее не удается найти (нет такой функции). Может кто ни буть написать пример как мне экспортировать в dll методы класса?
  • Вопрос задан
  • 122 просмотра
Решения вопроса 1
@none7
Почему при работе с процедурами Вы положили в .h файл только декларацию функции, а в случае с классами запихнули всю реализацию? Нужно отделять мух от котлет. Методы можно реализовать и отдельно от объявления класса, если указывать их полное имя, например
// xyz.h
class xyz
{
private:
  int abc;
public:
  PROJECT2_API int printing_int();
};
//xyz.cpp
PROJECT2_API int hyz::printing_int() { // return 5
    return abc;
}


P.S. Мне очень интересно как Ваш код будет работать в вот таком случае.
void printing(char* pChar) {
  char a[] = "Example String";
  strcpy_s(pChar, strlen(a) + 1, a);
}
int main() {
  char[4] buff = {0};
  printing(buff);
  printf("%s\n", buff);
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы