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

Вниз

Сишный класс в качестве параметра функции   Найти похожие ветки 

 
Spirit111   (2006-08-28 02:26) [0]

Вопросик таков:

у меня есть серверный АПИ на си, суть которого в том, что есть сишный класс:

struct CServer
 {
  virtual int         __stdcall Version(void);
 }

(Там есть и другие методы, но для простоты будем считать, что метод только один)

Далее я должен написать dll, в которой в одной из экспортируемых функций я должен принять этот сишный класс в качестве параметра:

int __declspec(dllexport) __stdcall Startup(CServer *server)

с тем, чтобы потом его использовать в других функциях для обращения к методам этого класса.

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

Так будет правильно?

type
 TCServer = class
    function Version: integer; stdcall; virtual;
 end;

Или не так?


 
Ketmar ©   (2006-08-28 04:04) [1]

зависит от компилятора. надёжней всего сделать на сях "обёртку", которая превратит "классовость" в нормальную "процедурность", и работать уже с ней.


 
evvcom ©   (2006-08-28 09:32) [2]

Насколько я помню, в Си классы описываются не с помощью struct, а с помощью class. struct - это структура или в терминах Object Pascal - запись. Если в твоем АПИ только структуры, то вполне можешь обойтись и Дельфями, если же все-таки есть классы, то тогда или обертка на Си, как предлагал Ketmar, или извращаться на ассемблере, поскольку в MSVC объектные методы вызываются иначе, чем в дельфях. Во всяком случае, я ковырял как-то MFC. Ссылка на объект передается в ecx, остальное, по-моему, в eax, edx, дальше через стек. Никакие директивы типа stdcall, cdecl, safecall не помогут.


 
MBo ©   (2006-08-28 09:50) [3]

http://rvelthuis.de/articles/articles-cppobjs.html


 
Ketmar ©   (2006-08-28 10:22) [4]

> [2] evvcom ©   (28.08.06 09:32)
афаир, class -- это struct с областями видимости. %-)


 
jack128 ©   (2006-08-28 11:29) [5]

evvcom ©   (28.08.06 9:32) [2]
Насколько я помню, в Си классы описываются не с помощью struct, а с помощью class. struct - это структура или в терминах Object Pascal - запись


AFAIR - struct от class отличается только тем, что в class поля и методы по умолчанию private, а в struct - public
Ketmar ©   (28.08.06 10:22) [4]
вроде и в структ такое есть.  Но сейчас проверить не на чем.


 
jack128 ©   (2006-08-28 11:40) [6]

jack128 ©   (28.08.06 11:29) [5]
Но сейчас проверить не на чем.

нашел на чем проверить - я прав :-)


 
Ketmar ©   (2006-08-28 11:49) [7]

> [6] jack128 ©   (28.08.06 11:40)
ну и не уверен я, что struct наследовать можно. %-)


 
jack128 ©   (2006-08-28 12:03) [8]

Ketmar ©   (28.08.06 11:49) [7]
ну и не уверен я

а зря.


 
han_malign ©   (2006-08-28 12:04) [9]


> ну и не уверен я, что struct наследовать можно.

- можно, одно но - стоит, скажем, в MSVC в строке компилятора добавить /TC (Compile as C Code) - и методы/деклараторы видимости в struct компилироваться не будут, как впрочем и любые другие классы... :))


 
Ketmar ©   (2006-08-28 12:12) [10]

> [8] jack128 ©   (28.08.06 12:03)
так давно это было -- C++.


 
Dimka Maslov ©   (2006-08-28 14:01) [11]

Когда я объединял код, написанный на Сях, с кодом в Delphi, то сделал библиотеку с сишным кодом COM-сервером. Таким способом удалось воспользоваться классами.


 
guav ©   (2006-08-28 14:06) [12]

> -- C++

А не лучше ли С - 1 ?


 
Ketmar ©   (2006-08-28 14:32) [13]

> [12] guav ©   (28.08.06 14:06)
неа. --C++ -- это просто C. %-)


 
Ketmar ©   (2006-08-28 14:32) [14]

> [13] Ketmar ©   (28.08.06 14:32)
ой. натупил, извиняюсь. %-)


 
Сергей М. ©   (2006-08-28 14:38) [15]


> Spirit111   (28.08.06 02:26)
>
> Вопросик таков:


Вердикт: СОМ/OLE


 
Spirit111   (2006-09-10 00:29) [16]

Большое спасибо всем ответившим. Буду копать дальше.

P.S. Сорри за поздний ответ - был в отпуске :)



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

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

Наверх




Память: 0.5 MB
Время: 0.052 c
15-1159531000
BOA_KAA
2006-09-29 15:56
2006.10.22
Может, кто видел....


1-1158156408
Так-то
2006-09-13 18:06
2006.10.22
Весь мир врет?


15-1159444290
Проггер
2006-09-28 15:51
2006.10.22
Завораживающая картинка.


2-1159967094
ArtemESC
2006-10-04 17:04
2006.10.22
Приведение типов...


9-1136193783
hired
2006-01-02 12:23
2006.10.22
выбор готового движка