![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сишный класс в качестве параметра функции
Spirit111 © (2006-08-28 02:26:00)Вопросик таков:
у меня есть серверный АПИ на си, суть которого в том, что есть сишный класс:
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;
Или не так?
Spirit111 (2006-09-10 00:29:00) [1]Большое спасибо всем ответившим. Буду копать дальше.
P.S. Сорри за поздний ответ - был в отпуске :)
Сергей М. (2006-08-28 14:38:00) [2]
> Spirit111 (28.08.06 02:26)
>
> Вопросик таков:
Вердикт: СОМ/OLE
Ketmar (2006-08-28 14:32:00) [3]> [12] guav © (28.08.06 14:06)
неа. --C++ -- это просто C. %-)
Ketmar (2006-08-28 14:32:00) [4]> [13] Ketmar © (28.08.06 14:32)
ой. натупил, извиняюсь. %-)
guav (2006-08-28 14:06:00) [5]> -- C++
А не лучше лиС - 1?
Dimka Maslov (2006-08-28 14:01:00) [6]Когда я объединял код, написанный на Сях, с кодом в Delphi, то сделал библиотеку с сишным кодом COM-сервером. Таким способом удалось воспользоваться классами.
Ketmar (2006-08-28 12:12:00) [7]> [8] jack128 © (28.08.06 12:03)
так давно это было -- C++.
han_malign (2006-08-28 12:04:00) [8]
> ну и не уверен я, что struct наследовать можно.
- можно, одно но - стоит, скажем, в MSVC в строке компилятора добавить /TC (Compile as C Code) - и методы/деклараторы видимости в struct компилироваться не будут, как впрочем и любые другие классы... :))
jack128 (2006-08-28 12:03:00) [9]Ketmar © (28.08.06 11:49) [7]
ну и не уверен я
а зря.
Ketmar (2006-08-28 11:49:00) [10]> [6] jack128 © (28.08.06 11:40)
ну и не уверен я, что struct наследовать можно. %-)
jack128 (2006-08-28 11:40:00) [11]jack128 © (28.08.06 11:29) [5]
Но сейчас проверить не на чем.
нашел на чем проверить - я прав :-)
jack128 (2006-08-28 11:29:00) [12]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]
вроде и в структ такое есть. Но сейчас проверить не на чем.
Ketmar (2006-08-28 10:22:00) [13]> [2] evvcom © (28.08.06 09:32)
афаир, class -- это struct с областями видимости. %-)
MBo (2006-08-28 09:50:00) [14]http://rvelthuis.de/articles/articles-cppobjs.html
evvcom (2006-08-28 09:32:00) [15]Насколько я помню, в Си классы описываются не с помощью struct, а с помощью class. struct - это структура или в терминах Object Pascal - запись. Если в твоем АПИ только структуры, то вполне можешь обойтись и Дельфями, если же все-таки есть классы, то тогда или обертка на Си, как предлагал Ketmar, или извращаться на ассемблере, поскольку в MSVC объектные методы вызываются иначе, чем в дельфях. Во всяком случае, я ковырял как-то MFC. Ссылка на объект передается в ecx, остальное, по-моему, в eax, edx, дальше через стек. Никакие директивы типа stdcall, cdecl, safecall не помогут.
Ketmar (2006-08-28 04:04:00) [16]зависит от компилятора. надёжней всего сделать на сях "обёртку", которая превратит "классовость" в нормальную "процедурность", и работать уже с ней.