Как слинковать .def файл
От: mike_tihomirov  
Дата: 15.02.10 10:34
Оценка:
Доброго дня всем.
Вопрос такой: у меня MSVS 2005.
Создал .h файл с интерфейсом и .cpp с реализацией и .def файл

Есть прога LINK.exe. а вот как дальше быть?
Как-то с консолью надо чето командить, или в самой студии в командной
строке что то вводить.
На F5 выдает:
Код:

Command line warning D9028 : minimal rebuild failure, reverting to normal build.

и

Код:

fatal error C1902: Program database manager mismatch; please check your installation


к примеру:
//myinterface.h

Код:

struct I_MyInterface
{
virtual bool Init(int params) = 0;
virtual bool Release() = 0;
virtual bool DoStuff() = 0;
};
extern "C"
{
__declspec(dllexport) HRESULT GetMyInterface(I_MyInterface** pInterface);
typedef HRESULT (*GETINTERFACE)(I_MyInterface** pInterface);

__declspec(dllexport) HRESULT FreeMyInterface(I_MyInterface** pInterface);
typedef HRESULT (*FREEINTERFACE)(I_MyInterface** pInterface);
}
//=================
//myinterface.cpp

Код:

#include "I_MyInterface.h"
#include <objbase.h>

class CMyClass : public I_MyInterface
{
public:
bool Init(int params){cout << params << endl;}
bool Release(){return true;}
void DoStuff(){cout << "Use OK!" << endl;}

CMyClass(){}
~CMyClass(){}
};
//-------------
HRESULT GetMyInterface(I_MyInterface** pInterface)
{
if(! *pInterface)
{
*pInterface = new CMyClass;
return S_OK;
}
return E_FAIL;
}
//--------------------
HRESULT FreeMyInterface(I_MyInterface** pInterface)
{
if(! *pInterface)
return E_FAIL;
delete *pInterface;
*pInterface = 0;
return S_OK;
}
//===================
//myinterface.def

Код:

LIBRARY "myinterface"
EXPORTS
GetMyInterface
FreeMyInterface

или def. файл не правильно написал.
Вобщем я конкретно запутался.
Заранее спасибо за понимание!!!
Re: Как слинковать .def файл
От: Pavel Dvorkin Россия  
Дата: 15.02.10 12:41
Оценка:
Здравствуйте, mike_tihomirov, Вы писали:

_>Доброго дня всем.

_>Вопрос такой: у меня MSVS 2005.
_>Создал .h файл с интерфейсом и .cpp с реализацией и .def файл

Выкинь def-файл.

_>Есть прога LINK.exe. а вот как дальше быть?

_>Как-то с консолью надо чето командить, или в самой студии в командной
_>строке что то вводить.
_>На F5 выдает:
_>Код:

_>Command line warning D9028 : minimal rebuild failure, reverting to normal build.


Не обращай внимания.

_>и


_>Код:


_>fatal error C1902: Program database manager mismatch; please check your installation


А вот это серьезнее.

//////////////
PDB-файл базы данных программы был создан с использованием более поздней версии mspdbXX.dll по сравнению с версией этой библиотеки, обнаруженной компилятором в системе. Как правило, эта ошибка указывает на то, что файл mspdbsrv.exe или mspdbcore.dll отсутствует или версия этих файлов отличается от версии библиотеки mspdbXX.dll. Значение XX в имени файла mspdbXX.dll изменяется с выпуском каждой новой версии продукта. Например, в Visual Studio 2005 этот файл называется mspdb80.dll.

Проверьте, что версии установленных в системе файлов mspdbsrv.exe, mspdbcore.dll и mspdbXX.dll совпадают. Убедитесь, что в каталог, содержащий инструменты компиляции и компоновки для целевой платформы, не были скопированы файлы с несовпадающими версиями. Например, файлы могли быть скопированы для того, чтобы вызывать компилятор или компоновщик из командной строки без настройки переменной окружения PATH.
//////////////




Попробуй Rebuild All. Если не поможет — ошиьки в инсталляции.

А вообще начни с того, что сделай в студии новый проект, тип — DLL. Добавь в него свои .h и .cpp файлы и попробуй откомпилировать. def-файл не нужен, у тебя и так все есть для экспорта (declspec(dllexport).
With best regards
Pavel Dvorkin
Re[2]: Как слинковать .def файл
От: mike_tihomirov  
Дата: 15.02.10 13:58
Оценка:
Понял. Я .dll так как вы говорили, всегда и делал.
только вот с .def не але...
Спасибо за совет!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.