Форум: "Основная";
Текущий архив: 2006.10.22;
Скачать: [xml.tar.bz2];
ВнизСишный класс в качестве параметра функции Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.031 c