Проблема в VS 2005, ктоторой нет в VS 2003
От: Propheta Украина http://www.domashney-stranici.net
Дата: 03.01.08 01:34
Оценка:
Столкнулся с проблемой в Visual Studio 2005 при использовании точки входа не в приложении, а в статической библиотеке.
Создаю два проекта lib и exe. Вот код из этих проектов:

Проект lib:

lib.h
#pragma once
#include <Windows.h>
class lib
{
public:
    lib();
    virtual~lib ();
    virtual int run();
};
lib* getapp();

lib.cpp
#include "stdafx.h"
#include "lib.h"
extern lib* g_plib = NULL;
lib::lib()
{
    if(g_plib)
        g_plib=this;
};
lib::~lib()
{
    if(g_plib==this)
        g_plib=NULL;
};
int lib::run() {return 1;};
lib* getlib() {return g_plib;};

entryp.cpp
#include "stdafx.h"
#include "lib.h"

extern "C" int WINAPI _tWinMain(HINSTANCE,HINSTANCE,LPWSTR,int)
{
    lib*plib=getlib();
    return plib->run();
};

Проект exe:

exe.h
#pragma once

#include "lib.h"
#pragma comment (lib,"lib.lib")

class exe : public lib
{
public:
    exe();
    virtual~exe();
    virtual int run();
};
extern exe g_exe;

exe.cpp
#include "stdafx.h"
#include "exe.h"

exe g_exe;
exe::exe(){};
exe::~exe(){};
int exe::run()
{
    MessageBoxW (NULL,L"It's work!",L"Yahoo!",MB_OK);
    return 1;
};

А он мне LNK2019: unresolved external symbol _wWinMain@16 referenced in function ___tmainCRTStartup MSVCRTD.lib.
Причём это же солюшэн в VS 2003 работает на ура.

Помогите плиз ламеру. Уже месяц пытаюсь найти выход.
Добавлена разметка — Кодт
Re: Проблема в VS 2005, ктоторой нет в VS 2003
От: remark Россия http://www.1024cores.net/
Дата: 03.01.08 09:10
Оценка:
Здравствуйте, Propheta, Вы писали:

P>Столкнулся с проблемой в Visual Studio 2005 при использовании точки входа не в приложении, а в статической библиотеке.

P>Создаю два проекта lib и exe. Вот код из этих проектов:
P>А он мне LNK2019: unresolved external symbol _wWinMain@16 referenced in function ___tmainCRTStartup MSVCRTD.lib.
P>Причём это же солюшэн в VS 2003 работает на ура.


В статической библиотеке определен макрос _UNICODE и UNICODE?
Свойства проекта -> General -> Character Set == Use Unicode Character Set?


P>Помогите плиз ламеру. Уже месяц пытаюсь найти выход.


Ещё скажи, что с прошлого года ищешь выход


1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[2]: Проблема в VS 2005, ктоторой нет в VS 2003
От: Propheta Украина http://www.domashney-stranici.net
Дата: 04.01.08 04:51
Оценка:
Здравствуйте, remark, Вы писали:

R>В статической библиотеке определен макрос _UNICODE и UNICODE?

R>Свойства проекта -> General -> Character Set == Use Unicode Character Set?

Стоит юникод.
Вот только изменение на мультибит или на неопределённый не помогает.
Re[3]: Проблема в VS 2005, ктоторой нет в VS 2003
От: cr_az Украина  
Дата: 07.01.08 21:07
Оценка:
Здравствуйте, Propheta, Вы писали:

P>Стоит юникод.

P>Вот только изменение на мультибит или на неопределённый не помогает.

Поставь в линкере ключи /FORCE , /Zc:wchar_t-
Такая ошибка бывает, когда студия не может найти нужные либы. Проверь настройки и переменные окружения студии.
Re: Проблема в VS 2005, ктоторой нет в VS 2003
От: Аноним  
Дата: 10.01.08 10:26
Оценка:
Здравствуйте, Propheta, Вы писали:

P>Столкнулся с проблемой в Visual Studio 2005 при использовании точки входа не в приложении, а в статической библиотеке.

P>Создаю два проекта lib и exe. Вот код из этих проектов:

P>Проект lib:


P>lib.h

P>[c]

P>lib* getapp();



P>lib* getlib() {return g_plib;};



P>Помогите плиз ламеру. Уже месяц пытаюсь найти выход.


Насколько я понимаю, ты просто не совсем внисательно смотрел свой код, замени в lib.h getapp() на getlib() и должно все скомпилятся
Re: Проблема в VS 2005, ктоторой нет в VS 2003
От: Аноним  
Дата: 10.01.08 10:48
Оценка:
Судя по ошибке, приложение не может найти точку входа, которой в данном случае является функция main(int argc, _TCHAR* argv[]).
Вставте ее в ехе.cpp создайте экземпляр класса и вызовите метод run.
Re[2]: Проблема в VS 2005, ктоторой нет в VS 2003
От: Аноним  
Дата: 19.01.08 00:45
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Propheta, Вы писали:


P>>Столкнулся с проблемой в Visual Studio 2005 при использовании точки входа не в приложении, а в статической библиотеке.

P>>Создаю два проекта lib и exe. Вот код из этих проектов:

P>>Проект lib:


P>>lib.h

P>>[c]

P>>lib* getapp();



P>>lib* getlib() {return g_plib;};



P>>Помогите плиз ламеру. Уже месяц пытаюсь найти выход.


А>Насколько я понимаю, ты просто не совсем внисательно смотрел свой код, замени в lib.h getapp() на getlib() и должно все скомпилятся


Здесь извиняюсь. Ошибся. Только я не копировал это из проектов. Здесь всё рукаи ма скорую писал. Вообще проект довольно большой и перенёс я его из 2003 студии.
В ней всё нормально. После переноса сталась беда. Не компилится и всё. В проектах у меня всё нормально.
Re[2]: Проблема в VS 2005, ктоторой нет в VS 2003
От: Аноним  
Дата: 19.01.08 00:53
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Судя по ошибке, приложение не может найти точку входа, которой в данном случае является функция main(int argc, _TCHAR* argv[]).

А>Вставте ее в ехе.cpp создайте экземпляр класса и вызовите метод run.


Ну почти...
main(int argc, _TCHAR* argv[]) это консольная гадость, а у меня Win32 приложение.

Пробовал
int WINAPI _tWinMain (HINSTANCE, HINSTANCE, LPTSTR, int)
int WINAPI wWinMain (HINSTANCE, HINSTANCE, LPWSTR, int)
#pragma comment (linker, "/ENTRY:wWinMain") тоже не помогает.
Re[2]: Проблема в VS 2005, ктоторой нет в VS 2003
От: Propheta Украина http://www.domashney-stranici.net
Дата: 19.01.08 01:01
Оценка:
Здравствуйте, remark, Вы писали:

R>Здравствуйте, Propheta, Вы писали:


P>>Столкнулся с проблемой в Visual Studio 2005 при использовании точки входа не в приложении, а в статической библиотеке.

P>>Создаю два проекта lib и exe. Вот код из этих проектов:
P>>А он мне LNK2019: unresolved external symbol _wWinMain@16 referenced in function ___tmainCRTStartup MSVCRTD.lib.
P>>Причём это же солюшэн в VS 2003 работает на ура.


R>В статической библиотеке определен макрос _UNICODE и UNICODE?

R>Свойства проекта -> General -> Character Set == Use Unicode Character Set?

Всё же получилось. Спасибо. Только компилятор раза с четвёртого понял, что ему нужно менять.
Вот теперь вопрос. А если я захочу написать юникод библиотеку или приложение, что тогда делать?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.