Главная страница
    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
1-1120720434
Noosfert
2005-07-07 11:13
2005.07.25
TImage и jpeg


4-1117276299
DeepProg
2005-05-28 14:31
2005.07.25
Drag&amp;Drop с помощью TWMNChitTest


14-1120044792
Магнум
2005-06-29 15:33
2005.07.25
Выход в Инет через Pocket PC


14-1120497176
Aleksandr_SB
2005-07-04 21:12
2005.07.25
Книги по Microsoft SQL Server 2000


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