Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
2-1243105083
AntonioPermskiy
2009-05-23 22:58
2009.08.09
TListView vsList


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


2-1245065034
b/@.
2009-06-15 15:23
2009.08.09
Какое практическое применение UniqueString ?


15-1244392962
Stan*
2009-06-07 20:42
2009.08.09
Посоветуйте компонент для мультиязыка, для D2009


15-1244537205
Neket
2009-06-09 12:46
2009.08.09
Классификация БД





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский