Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.08.09;
Скачать: CL | DM;

Вниз

MS VC++ 2008 EE (или УЮ :) )   Найти похожие ветки 

 
Dennis I. Komarov ©   (2009-06-05 10:25) [0]

Для небольшого теста программы нужно сделать библиотеку dll (не на дельфи). В ней окно и две функции (Create и Destroy). Вызываться должны так:

<DELPHI>
 TBaseFunction = function(AHandle, AParent: HWND; AConnect: PAnsiChar): HWND; stdcall;
</DELPHI>

думаю параметры коментировать лишнее :)

Для этого скачал сабж, а там все только для .NET :( Это фишка EE или политика MS такова, что к 2008(9) г. без .NET вообще никуда?


 
@!!ex ©   (2009-06-05 11:07) [1]

> [0] Dennis I. Komarov ©   (05.06.09 10:25)
> Для этого скачал сабж, а там все только для .NET :( Это
> фишка EE или политика MS такова, что к 2008(9) г. без .NET
> вообще никуда?

Вы ошибаетесь.
http://sol-online.org/content/msvs2008ee.PNG
Как вы можете видеть - 3 пункт это обычный С++.
Единственная проблема, Platform SDK в поставке не идет, надо отдельно скачивать.


 
@!!ex ©   (2009-06-05 11:10) [2]

Если вам по каким то причинам не нравится IDE, вы можете взять Eclipse и подружить его с MSVC++ компилятором, или использовать MinGW


 
Dennis I. Komarov ©   (2009-06-05 11:27) [3]

Из UI доступна лишь Форма Windows Forms, а это вроде как .NET

Хотя могу и ошибаться в плане того, что в UI вообще еще что-либо должно быть...


 
palva ©   (2009-06-05 11:42) [4]

А как вы собираетесь поместить окно в dll ?
Зачем вы ищете в студии приложение с UI, если вам нужна dll ?
По-моему в студии 8 всё как и раньше: при создании проекта выбираете C++ Win32, отмечаете dll и вперед.


 
Dennis I. Komarov ©   (2009-06-05 11:53) [5]


> palva ©   (05.06.09 11:42) [4]

"Языками не владеюс Ваше благородие" (С)
:)


>  ...и вперед

А вот тут и не едить дальше... :)

Ладно, понял что UI тут непричем...


 
@!!ex ©   (2009-06-05 12:22) [6]

> [3] Dennis I. Komarov ©   (05.06.09 11:27)
> Из UI доступна лишь Форма Windows Forms, а это вроде как
> .NET
>
> Хотя могу и ошибаться в плане того, что в UI вообще еще
> что-либо должно быть...

В Express все ручками надо делеать.
Обычный Win 32 Project-> Dll и понеслась...


 
Dennis I. Komarov ©   (2009-06-05 12:27) [7]


> В Express все ручками надо делеать.
> Обычный Win 32 Project-> Dll и понеслась...

:)
Хотел наскоком сделать простейшую dll-ку - видимо так просто не получится :) Уже пошел к Googl-у


 
clickmaker ©   (2009-06-05 12:29) [8]

> [4] palva ©   (05.06.09 11:42)
> А как вы собираетесь поместить окно в dll ?

а какие проблемы?


 
@!!ex ©   (2009-06-05 12:34) [9]

> [7] Dennis I. Komarov ©   (05.06.09 12:27)
> Хотел наскоком сделать простейшую dll-ку

Простейшая длл делается элементарно.
а вот окно туда запихать - это уже сложнее.


 
Dennis I. Komarov ©   (2009-06-05 12:38) [10]


> а вот окно туда запихать - это уже сложнее.

WinAPI отменили? :)
Хотя с формами конечно все проще...


 
@!!ex ©   (2009-06-05 12:41) [11]

> [10] Dennis I. Komarov ©   (05.06.09 12:38)

Я не говорил сложно, я сказал сложнее.
Dll стандартного вида создается без единой строчки кода.
А для окна надо код писать.


 
Dennis I. Komarov ©   (2009-06-05 12:51) [12]


> А для окна надо код писать.

Ясный перец :) Мне непонятен С++ сам по себе. Возможно сейчас сморожу чушь, но если провести аналогию с Delphi то *.h - interface, *.cpp - implementation.
Дальше вперед в { дебри } кода C++


 
palva ©   (2009-06-05 13:02) [13]


> а какие проблемы?

Проблемы в том, что я не знаю, как он собирается это делать, потому и спросил. Формально это вообще невозможно. Можно поместить в dll некоторые функции для создания окна. Если он ищет в студии UI, значит он ожидает, что такие функции сгенерирует ему студия. Можно было бы посоветовать ему MFC, да жалко человека...


 
clickmaker ©   (2009-06-05 13:08) [14]

> [12] Dennis I. Komarov ©   (05.06.09 12:51)
>
> > А для окна надо код писать.
>
> Ясный перец :) Мне непонятен С++ сам по себе

в MSDN по CreateWindow есть ссылка внизу - Using Window Classes
там есть пример создания простенького окна


 
palva ©   (2009-06-05 13:48) [15]

Было бы логично положить в окно диалоговый ресурс. Тогда уже можно в редакторе ресурсов насоздавать всяких кнопочек и полей. А окно создавать созданием диалога. Это гораздо проще (одно обращение к API-функции), да и диалог гораздо ближе идейно к делфийскому Form, а потому привычнее. А оконную функцию для обработки кнопок можно написать в основном приложении.


 
@!!ex ©   (2009-06-05 14:02) [16]

> [15] palva ©   (05.06.09 13:48)
> Было бы логично положить в окно диалоговый ресурс. Тогда
> уже можно в редакторе ресурсов насоздавать всяких кнопочек
> и полей. А окно создавать созданием диалога. Это гораздо
> проще (одно обращение к API-функции), да и диалог гораздо
> ближе идейно к делфийскому Form, а потому привычнее. А оконную
> функцию для обработки кнопок можно написать в основном приложении.

Нет. В Express этот функционал недоступен.


 
Dennis I. Komarov ©   (2009-06-05 14:11) [17]


> clickmaker ©   (05.06.09 13:08) [14]

Thank You.


 
Dennis I. Komarov ©   (2009-06-05 15:00) [18]

HINSTANCE и HWND в чем разница?


 
Dennis I. Komarov ©   (2009-06-05 15:12) [19]

Зацените труд и чего в нем еще не хватает для export:

// 111.cpp: определяет экспортированные функции для приложения DLL.
//

#include "stdafx.h"
#include "windows.h"

HWND CreateIExample(HINSTANCE AHandle, HWND AParent, PCHAR AConnect)
{
   HWND hwnd;

hwnd = CreateWindow(
       LPCWSTR("STATIC"),        // name of window class
       LPCWSTR("Example"),            // title-bar string
       SS_SIMPLE, // top-level window
       0, 0, 640, 480,
       AParent,         // no owner window
       (HMENU) NULL,        // use class menu
       AHandle,           // handle to application instance
       (LPVOID) NULL);      // no window-creation data

if (!hwnd)
       return 0;

ShowWindow(hwnd, SW_SHOWDEFAULT);
   UpdateWindow(hwnd);
return hwnd;
}


 
clickmaker ©   (2009-06-05 15:17) [20]

> чего в нем еще не хватает для export

.def файла

LIBRARY MyDLL

EXPORTS
CreateIExample


 
Dennis I. Komarov ©   (2009-06-05 15:28) [21]


> .def файла
>
> LIBRARY MyDLL
>
> EXPORTS
> CreateIExample

Что за зверь и как его причипить?


 
clickmaker ©   (2009-06-05 15:52) [22]

> [21] Dennis I. Komarov ©   (05.06.09 15:28)

это указание линкеру, какие функции надо экспортировать.
добавь файл в проект


 
Dennis I. Komarov ©   (2009-06-05 16:02) [23]

Скорее всего в EE такого нет :(
Из спавки:
A module-definition (.def) file is a text file containing one or more module statements that describe various attributes of a DLL. If you are not using the __declspec(dllexport) keyword to export the DLL"s functions, the DLL requires a .def file.

может
extern "C" _declspec(dllexport) HWND CreateIExample(HINSTANCE AHandle, HWND hWnd, PCHAR AConnect)
будет достаточно, правда не знаю что есть "C"


 
clickmaker ©   (2009-06-05 16:08) [24]

> будет достаточно, правда не знаю что есть "C"

ну или так.
extern "C" дает указание линкеру, что имя функции не надо декорировать в стиле c++


 
@!!ex ©   (2009-06-05 16:25) [25]

> [23] Dennis I. Komarov ©   (05.06.09 16:02)
> Скорее всего в EE такого нет :(

Есть. В настройках проекта указывается.


 
@!!ex ©   (2009-06-05 16:37) [26]

> [24] clickmaker ©   (05.06.09 16:08)
> extern "C" дает указание линкеру, что имя функции не надо
> декорировать в стиле c++

Разверну:
Линкер добавляет к названию функции дофига хлама. По этому хламу можно узнать какие параметры у функции и какой результат.
Например:
__declspec(dllexport) void bsInitEngine(HWND Wnd, HDC DC, int x, int y, int width, int height)
превращается в:
?bsInitEngine@YAXPAUHWND__@@PAUHDC__@@HHHH@Z

Вот чтобы этого не происходило надо писать extern "C" или добавляеть def файл с описанием экспортируемых функций.


 
Dennis I. Komarov ©   (2009-06-05 17:03) [27]

Последнее, как на этом окне нарисовать что-нить, или текст какой, или вообще просто залить цветом, что-бы видно было, что оно там есть?

А так, вроде работает, ошибок не видать...


 
clickmaker ©   (2009-06-05 17:09) [28]

> как на этом окне нарисовать что-нить, или текст какой, или
> вообще просто залить цветом

а там разве нет текста "Example"?


 
Dennis I. Komarov ©   (2009-06-05 17:13) [29]

hwnd = CreateWindow(
      LPCWSTR("STATIC"),        // name of window class
      LPCWSTR("Example"),            // title-bar string
      SS_SIMPLE, // top-level window
      0, 0, 640, 480,
      AParent,         // no owner window
      (HMENU) NULL,        // use class menu
      AHandle,           // handle to application instance
      (LPVOID) NULL);      // no window-creation data


 
Dennis I. Komarov ©   (2009-06-05 17:15) [30]

Это окно вписывается в MDI-child возращаясь к... так что оно там и не должно быть ;)


 
clickmaker ©   (2009-06-05 17:20) [31]

кстати, а почему  LPCWSTR?


 
Dennis I. Komarov ©   (2009-06-05 17:25) [32]


> кстати, а почему  LPCWSTR?

Ругался пока не привел к нему...


 
@!!ex ©   (2009-06-05 17:33) [33]

> [31] clickmaker ©   (05.06.09 17:20)
> кстати, а почему  LPCWSTR?

Все функции в 2008 по умолчанию Юникодовские.


> [32] Dennis I. Komarov ©   (05.06.09 17:25)
> Ругался пока не привел к нему...

Можно юзать A варианты. Например CreateWindowA, LoadLibraryA и т.д.


 
Dennis I. Komarov ©   (2009-06-05 17:43) [34]

[27] ???


 
GlFox ©   (2009-06-05 21:19) [35]

> Нет. В Express этот функционал недоступен.
Чего не доступен? Ресурсы нормально умеет компилировать и линковать. Редактировать не хочет. Так это ж не беда, халявных едиторов найти не проблема.
> Все функции в 2008 по умолчанию Юникодовские.
Та не правда, может проект по умолчанию создается юникодный, а поменять на мультибайт опять же не проблема.


 
Игорь Шевченко ©   (2009-06-05 21:46) [36]

ежели окно куда-то встраивается, оно должно иметь стили WS_CHILD | WS_VISIBLE

ShowWindow и UpdateWindow я бы выкинул к е.м.


 
Игорь Шевченко ©   (2009-06-05 21:46) [37]

(в дополнение к SS_SIMPLE, разумеется)


 
@!!ex ©   (2009-06-05 22:00) [38]

> Чего не доступен? Ресурсы нормально умеет компилировать
> и линковать. Редактировать не хочет. Так это ж не беда,
> халявных едиторов найти не проблема.

Не умеет он компилировать ресурсы. Это первое.
Я ничего не говорил про редакторы ресурсов. Речь идет об Expresse, в нем ресурсы редактировать нельзя.

> [35] GlFox ©   (05.06.09 21:19)
> Та не правда, может проект по умолчанию создается юникодный,
> а поменять на мультибайт опять же не проблема.

Что значит не правда??
Выдержка из WinBase.h:
#ifdef UNICODE
#define LoadLibrary  LoadLibraryW
#else
#define LoadLibrary  LoadLibraryA
#endif // !UNICODE

И UNICODE по умолчанию опеределно. Где я не правду сказал??


 
@!!ex ©   (2009-06-05 22:08) [39]

> [38] @!!ex ©   (05.06.09 22:00)
> Не умеет он компилировать ресурсы. Это первое.

Хм. Интересное кино. Только что откомпилировл ресурс. Хотя неделю назад я так и не добился от него компиляции, пришлось Борландовским компилировать...


 
palva ©   (2009-06-05 22:32) [40]

Все-таки не советую автору вручную создавать кнопки и поля при помощи CreateWindow. Раз уж у вас вычислены все координаты и размеры, то ничего не стоит написать ресурс .RS вручную, а потом включить его в проект. Но нарисовать контролы это еще небольшая часть дела. В диалоге будет гораздо проще обрабатывать реакцию кнопок, переходы по полям при помощи Tab и т. д. А в окне с дочерними кнопками нужно будет писать дополнительный код для всего этого.



Страницы: 1 2 вся ветка

Текущий архив: 2009.08.09;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.016 c
15-1244565458
Rimdus
2009-06-09 20:37
2009.08.09
Перекрыть приватный метод


2-1244697316
Pavlov
2009-06-11 09:15
2009.08.09
повторный запуск MDIChild и передача параметров


15-1244183113
Dennis I. Komarov
2009-06-05 10:25
2009.08.09
MS VC++ 2008 EE (или УЮ :) )


15-1243872383
vrem
2009-06-01 20:06
2009.08.09
Локальный сайт при включенном интернете - как?


15-1244493792
Медвежонок Пятачок
2009-06-09 00:43
2009.08.09
новая мулька