Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2005.07.25;
Скачать: [xml.tar.bz2];

Вниз

Как написать аналог этого кода на MS Visual C++   Найти похожие ветки 

 
NewWonder ©   (2005-07-02 23:24) [0]

Вопрос не в тему, конечно, но я не знаю куда ещё обратиться. Помогите плиз!

library Dream3D;

uses
 ...;

procedure DrawGreed(l: integer); stdcall;
begin
 ...
end;

procedure DrawVoxel(x, y, z, r: GlFloat);
begin
 ...
end;

exports DrawGreed,
       DrawVoxel;

begin
end.


 
NewWonder ©   (2005-07-02 23:31) [1]

Очень срочно нужно, хелп!


 
isasa ©   (2005-07-02 23:32) [2]

Взять  Visual Studio и создать library,
не забывая
о DEF файле и переопределении имен
DrawGreed => DrawGreed@4


 
isasa ©   (2005-07-02 23:40) [3]

Примерно так.
Необходимыу три файла Dream3D.cpp Dream3D.def, Dream3D.h


// Dream3D.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"

BOOL APIENTRY DllMain( HANDLE hModule,
                      DWORD  ul_reason_for_call,
                      LPVOID lpReserved
     )
{
   return TRUE;
}

void _stdcall DrawGreed(l idx)
{
...........
}

-----------------------------------
// Dream3D.def
//

EXPORTS
DrawGreed=_DrawGreed@20

-----------------------------------
// Dream3D.h
//
extern "C" __declspec(dllexport) void _stdcall DrawGreed(int);


 
NewWonder ©   (2005-07-02 23:55) [4]

Уай, спасибо Вам огромное!!! А зачем нужно DrawGreed=_DrawGreed@20
DrawGreed => DrawGreed@4
?
Я только изучаю C++, после Delphi сложновато приходится и тут меня просят перевести dll"ку, написанную на Delphi в MSVC++, а я только-только основы языка начал изучать. Заранее благодарю!


 
NewWonder ©   (2005-07-02 23:57) [5]

Купил несколько толстеньких книжек по MSVC++, а там ничего с этой тематикой не нашёл :( Надо бы поискать литературу получше.


 
isasa ©   (2005-07-03 00:03) [6]

пардон
точка вжода
procedure DrawGreed(l: integer); stdcall;
в С соответственно
void _stdcall DrawGreed(l idx)

получит в имя _DrawGreed@4

надо

EXPORTS
DrawGreed=_DrawGreed@4


 
isasa ©   (2005-07-03 00:12) [7]

Подробнее
в С компилятор именует точки входа по принципу
_<объявленное имя>@<длина стека параметров>

в данном случае _DrawGreed@4

для вызова снаружи DrawGreed необходимо переопределить имя явно,
иначе во внешном модуле пршлось писать

procedure DrawGreed(l: integer); stdcall; external "mylib.dll" name "_DrawGreed@4";


 
NewWonder ©   (2005-07-03 12:18) [8]

Ешё один, наверное ламерский вопрос, но как узнать длину стека параметров?


 
isasa ©   (2005-07-03 12:41) [9]

:)
берем калькулятор и считаем :), например

void _stdcall myFunction(int, double, double);

4(int)+8(double)+8(double)=20,

значит => _myFunction@20

integer = int = 4 bytes
double = double = 8 bytes
pointer = * = 4 bytes
TmyClass = CClass = 4 bytes

это для Delphi

Type Range Significant digits Size in bytes
Real48 2.9 x 10^-39 .. 1.7 x 10^38 11-12 6
Single 1.5 x 10^-45 .. 3.4 x 10^38 7-8 4
Double 5.0 x 10^-324 .. 1.7 x 10^308 15-16 8
Extended 3.6 x 10^-4951 .. 1.1 x 10^4932 19-20 10
Comp -2^63+1 .. 2^63 -1 19-20 8
Currency -922337203685477.5808.. 922337203685477.5807 19-20 8

для С см help VS.


 
VMcL ©   (2005-07-03 12:43) [10]

>>NewWonder ©   (03.07.05 12:18) [8]

Просуммировать размеры передаваемых параметров, учитывая, что меньше 4-х байт параметр не использует.


 
NewWonder ©   (2005-07-03 13:30) [11]

Спасибо большое! Как я понял для каждого типа переменной в параметрах процедуры/функции имеется свой размер (фиксированный), а потом всё суммируем. Спасибо ещё раз!


 
isasa ©   (2005-07-03 14:34) [12]

По памяти не вспомню, а VS под рукой нет, но имена точек входа можно посмотреть в файле ссылок,
который генерирует линкер.
По умолчанию, для проекта опция выключена!


 
NewWonder ©   (2005-07-03 14:39) [13]

Ещё раз спасибо! Дальше сам постараюсь разобраться. Вы очень помогли!


 
iskatel ©   (2005-07-04 02:56) [14]

можно не парится, и  с начала не писать def файл, а просто обьявить функции extern, потом посмотреть в полученной длл с помошщью входящей в комплект проги depends как компилятор обозвал эти ф-ции это и будут их имена для def файла )))



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

Форум: "Потрепаться";
Текущий архив: 2005.07.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.014 c
14-1119803494
Nick Denry
2005-06-26 20:31
2005.07.25
Слетело 2 компа за неделю... или что такое Bulding DMI pool


11-1103710852
Fanny
2004-12-22 13:20
2005.07.25
Горячие клавиши WM_HOTKEY в KOL


3-1118394819
Andy Nortsov
2005-06-10 13:13
2005.07.25
Как правильно работать с ADO+ODBC+FireBird+Delphi?


1-1120738656
qwer-10
2005-07-07 16:17
2005.07.25
Поиск файлов


14-1120154138
ArMellon
2005-06-30 21:55
2005.07.25
Список юзверей в чате





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский