Форум: "Прочее";
Текущий архив: 2009.08.09;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.006 c