nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 11:09



Reply to topic  [ 295 posts ]  Go to page Previous  1, 2, 3, 4, 5 ... 20  Next
Proteus C++ DLL's 
Author Message
Maniac

Joined: 05 Nov 2008 19:47
Posts: 287
Location: 81.28.208.238
Reply with quote
Post 
Quote:
А протеус то уже упал?

Пока нет - надо в самом протеусе еще чегой-то покрутить
- читаю талмуд из примера...


17 Nov 2012 21:42
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Shaos wrote:
А протеус то уже упал? ;)

Да нет, Proteus не упал...

По плану в исходном документе создал графическую модель, которая будет работать
с нашей самодельной и нищебродской цифровой OURDEV.DLL:

Image

Поскольку DLL-ка пока пустая и ничего не делает, проверил только, как она
связывается с Proteus-ом. Для этого подправил код:
Code:
extern "C" IDSIMMODEL __declspec(dllexport) *createdsimmodel (CHAR *device, ILICENCESERVER *ils)
{
         MessageBox(0,"Выполняется обращение [createdsimmodel]",
                       "Внимание!",MB_ICONERROR);
//---   ils->authorize(model_key);
  return NULL;
}

extern "C" VOID __declspec(dllexport) deletedsimmodel (IDSIMMODEL *model)
{
}

#pragma argsused
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved)
{
 if(fwdreason==DLL_PROCESS_ATTACH) //---- Проецируем на адр. простр.
   {
         MessageBox(0,"DLL проецируется на адресное пространство",
                       "Внимание!",MB_ICONERROR);
   }
 return 1;
}

При старте Proteus было видно, как четко отработала функция Win API LoadLibrary(),
за ней также четко отыграл вызов: createdsimmodel.

То есть, по основным функциям обращения к DLL пока нужные соглашения, похоже,
что выполняются.

Proteus не падает, а значит и по типу обращения через стек всё вроде как совпадает...

Ну дальше по плану буду наполнять DLL функциональностью, и будем посмотреть... :wink:

_________________
iLavr


17 Nov 2012 21:49
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22411
Location: Silicon Valley
Reply with quote
Post 
Ну голимые сишные вызовы будут вызываться, а вот дальнейшее дёргание C++ классов-методов уже не проканает

_________________
:dj: https://mastodon.social/@Shaos


17 Nov 2012 22:02
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Shaos wrote:
Ну голимые сишные вызовы будут вызываться, а вот дальнейшее дёргание C++ классов-методов уже не проканает

Кокой ви писсямист... :( Так и сглазить недолга! :o

Меня сейчас чуть другое веселит... :roll:
Code:
      // Vector drawing services:   !!!!!
      virtual HGFXSTYLE creategfxstyle (CHAR *name=NULL) = 0;

Компилятор выдаёт: [C++ Error] vsm.hpp(253): E2451 Undefined symboI 'NULL'
У меня просто глаза на лоб лезут! :o
Это как же, вашу мать, извиняюсь, понимать? :-?

_________________
iLavr


17 Nov 2012 23:03
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Lavr wrote:
Компилятор выдаёт: [C++ Error] vsm.hpp(253): E2451 Undefined symboI 'NULL'
У меня просто глаза на лоб лезут! :o
Это как же, вашу мать, извиняюсь, понимать? :-?

Ну надо же!!!
Code:
#define NULL 0

или
Code:
#include <windef.h>

Эта "срака С++", как изволит выражовываться bar, за ночь весь мозг проклюёт!!!

Неужто ему
Code:
#include <windows.h>
мало?! :lol:


А вот
Code:
#define TRUE  1
#define FALSE 0
они в свой vsm.hpp вставили!!! :D

_________________
iLavr


17 Nov 2012 23:35
Profile
Maniac

Joined: 05 Nov 2008 19:47
Posts: 287
Location: 81.28.208.238
Reply with quote
Post 
Quote:
Ну голимые сишные вызовы будут вызываться, а вот дальнейшее дёргание C++ классов-методов уже не проканает

Зачем такой пессемизм.
Даже при поверхностном просмотре VSM.HPP, видно что связь
Proteusa с моделями практически тот-же COM.
А COM сервера можно писать на многих C++ для Win и вроде-бы
даже на дельфях.


18 Nov 2012 05:02
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
aav8 wrote:
Quote:
Просто интересует вопрос - компильнутся ли исходники OneWireDebugger...

Компильнулись...
в vsm.hpp закоментил определение для _int64

У меня немного другая ситуация - я начал собирать DLL по руководству:
Creation VSM - Modelos Digitales.PDF, поскольку проверил сразу готовую
DLL-ку от KAZUS.RU -=- OneWireDebugger.dll, и она у меня под Proteus
выдала ошибку.
А у них эта DLL - полностью рабочая... :-?

Когда у тебя компильнулась - тоже создал проект по исходникам OneWireDebugger,
но при компиляции куча ошибок вылезла. Причем каких-то явно глупых и связанных,
скорее, с ситаксисом.

Поэтому стал набирать по кусочкам исходник для OURDEV.DLL, но он тоже сейчас
подглюкивает при сборке... :(

У тебя какая версия самого Proteus? Моя - Release 6.7 SP3 with Advanced Simulation.
Я вот думаю - не слишком ли старовата....

_________________
iLavr


18 Nov 2012 06:19
Profile
Maniac

Joined: 05 Nov 2008 19:47
Posts: 287
Location: 81.28.208.238
Reply with quote
Post 
Quote:
У меня немного другая ситуация - я начал собирать DLL по руководству:
Creation VSM - Modelos Digitales.PDF, поскольку проверил сразу готовую
DLL-ку от KAZUS.RU -=- OneWireDebugger.dll, и она у меня под Proteus
выдала ошибку.
А у них эта DLL - полностью рабочая...

Когда у тебя компильнулась - тоже создал проект по исходникам OneWireDebugger,
но при компиляции куча ошибок вылезла. Причем каких-то явно глупых и связанных,
скорее, с ситаксисом.

Поэтому стал набирать по кусочкам исходник для OURDEV.DLL, но он тоже сейчас
подглюкивает при сборке...

У тебя какая версия самого Proteus? Моя - Release 6.7 SP3 with Advanced Simulation.
Я вот думаю - не слишком ли старовата....

Я взя пример с kasus.ru.
Практически все скомпилировалось.
Пришлось закоментить в VSM.HPP _int64.
... потом был перерыв на 7 часов ...
Сейчас по PDF из KASUS.RU в Ghjntect сделал модель, девайс.
и стал запускать DLL.
Есть-но сразу все не зажотело работать.
В борланде для экспорта функции нужны другие ключи.
Сейчас Proteus тупо висит. Буду разбираться.
Proteus 7.6
Borland C++ 5.01


18 Nov 2012 06:48
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
aav8 wrote:
В борланде для экспорта функции нужны другие ключи.

Я в Борланде в этот раз делал немного по-другому, нежели я обычно пишу DLL-ки:

Проект создавал вот как:
(New -> DLL Wizard -> галка [C++] -> галки [Use VCL, VC++ Style DLL] -> OK)

При этом получается DLL с точкой входа: DllMain, как в VC++.
и еще добавляю в проект файл: OURDEVAlias.def
Code:
EXPORTS
; VC funcname = BCB funcname
 createdsimmodel = _createdsimmodel
 deletedsimmodel = _deletedsimmodel

это даёт нормальные синонимы функциям с "_".

Работает правильно... Хотя обычно я делаю проект для DLL несколько иначе...

Но щас после "паузы в 8.5 часов" на меня что-то тотальный тупизм ниспал... :lol:


PS. Жалко нечем проверить, правильно ли компилируется DLL-ка... VC++
у меня никакого нет...
:(

_________________
iLavr


Last edited by Lavr on 18 Nov 2012 12:15, edited 1 time in total.



18 Nov 2012 07:03
Profile
Maniac

Joined: 05 Nov 2008 19:47
Posts: 287
Location: 81.28.208.238
Reply with quote
Post 
Quote:
Работает правильно... Хотя обычно я делаю проект для DLL несколько иначе...

Я предпочитаю визардами не пользоваться, и ручками
прописываю _sddcall и _export.
А про *.def что-то забыл - давно не пользовался.
Исправляюсь - Proteus 7.2.
Кстати DLL с kasus.ru не заработала.
Есть некоторое подозрение, что VSM.HPP для каждой весии свой...
На работе есть студия 2010 попробую на ней,
но в результате не уверен.


18 Nov 2012 07:50
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
aav8 wrote:
Даже при поверхностном просмотре VSM.HPP, видно что связь Proteusa
с моделями практически тот-же COM.

Про COM в VSMSDK.HLP написано вот что:
Quote:
The VSM API draws heavily on the concepts underlying Microsoft's™ COM architecture but does not implement it fully. Specifically, all the major VSM interfaces are implemented as C++ abstract classes. A pointer to an instance of such a class amounts to a pointer to a table of functions but with an easier and clearer syntax. The kernel provides each model with a number of these interface pointers which allow access to data and other relevant services.
We chose not to implement COM fully as it keeps the VSM API portable between operating systems (a Linux version is not unthinkable) and makes the installation and sharing of models between machines much simpler.

Так что COM - какой-то не совсем COM... :-?

aav8 wrote:
Есть некоторое подозрение, что VSM.HPP для каждой весии свой...

Я давно собирался заняться цифровыми моделями Proteus и собирал материалы для этого...
VSM.HPP - один и тот же (у меня их несколько собрано).
Но боюсь я, что это всё для Proteus 6.4 - тогда ещё VSM SDK был открытым...

Но надо же когда-то "толкнуть" всю эту проблему! Я опасался, что VSM.HPP вобще
не воспримется Борландом!
К сожалению - я не очень разбираюсь в тонкостях С++...

aav8 wrote:
Я предпочитаю визардами не пользоваться, и ручками
прописываю _sddcall и _export.

Я тоже обычно делаю всё вручную, но обычно я никогда не старался добиться совместимости
с VC++ - поэтому обратился к визарду.

_________________
iLavr


18 Nov 2012 08:13
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Про C++ abstract classes в VSMSDK.HLP написано вот что:
Quote:
Abstract Classes and Interfaces

In C++, an abstract class is a base class which contains virtual function prototypes which are not actually implemented. These functions are prototyped as follows:

VOID foo () = 0;

An interface class contains only these pure virtual functions and carries no data.
The interface can be implemented by deriving off the base class and overloading all the interface functions.
It is not possible to create an instance of an interface class; only pointers to interfaces are used. In fact, these pointers will always point to instances of derived classes which implement the interface.




PS. Придется, наверное, настойчиво "покурить" раздел Setting up the C++ Project
в VSM MODELLING TUTORIAL.
Хотя пока не вижу там ограничений на версию компилятора С++...

_________________
iLavr


Last edited by Lavr on 18 Nov 2012 08:37, edited 1 time in total.



18 Nov 2012 08:24
Profile
Maniac

Joined: 05 Nov 2008 19:47
Posts: 287
Location: 81.28.208.238
Reply with quote
Post 
Quote:
Так что COM - какой-то не совсем COM.

Ест-но не совсем и даже совсем ни COM, а принцип
организации/связывания:
-- через виртуальные функции.
-- для однозначности есть абстрактый класс, в котором
только виртуальные функции и все они абстрактные.
А их уже наполняеш функционалом.
У меня тоже есть класс на такомже принципе для
программ с плагинами - не нужно экспортировать
кучу различных функций.
Буду курить VSMSDK ...


18 Nov 2012 08:33
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Меня пока применимость Борланда С++ беспокоит...
Но единственное, что я пока прочитал это:
Quote:
Exactly what you do will depend on the compiler that you use and the complexity of the model, but typically you will need to create a header file, a C++ code file and to set up your IDDE to produce a 32 bit DLL.

Ну нигде нет явного ограничения, что только VC++ достоин для компиляции DLL для Proteusa...

_________________
iLavr


18 Nov 2012 08:45
Profile
Maniac

Joined: 05 Nov 2008 19:47
Posts: 287
Location: 81.28.208.238
Reply with quote
Post 
Quote:
Ну нигде нет явного ограничения, что только VC++ достоин для компиляции DLL для Proteusa...

Повторяюсь - должен подойти любо С++ компилятор, реализующий
виртуальные функции в стиле virtual table (применительно к Win).
Примерно такая фраза звучала в книге
Дональба Бокса "Сущиность технологии COM".
Будет время - полистаю - при удаче процитирую.


18 Nov 2012 08:59
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 295 posts ]  Go to page Previous  1, 2, 3, 4, 5 ... 20  Next

Who is online

Users browsing this forum: No registered users and 13 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.