Пока нет - надо в самом протеусе еще чегой-то покрутитьА протеус то уже упал?
- читаю талмуд из примера...
Moderator: Shaos
Да нет, Proteus не упал...Shaos wrote:А протеус то уже упал?
Code: Select all
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;
}
Кокой ви писсямист...Shaos wrote:Ну голимые сишные вызовы будут вызываться, а вот дальнейшее дёргание C++ классов-методов уже не проканает
Code: Select all
// Vector drawing services: !!!!!
virtual HGFXSTYLE creategfxstyle (CHAR *name=NULL) = 0;
Ну надо же!!!Lavr wrote:Компилятор выдаёт: [C++ Error] vsm.hpp(253): E2451 Undefined symboI 'NULL'
У меня просто глаза на лоб лезут!![]()
Это как же, вашу мать, извиняюсь, понимать?
Code: Select all
#define NULL 0
Code: Select all
#include <windef.h>
Code: Select all
#include <windows.h>
Code: Select all
#define TRUE 1
#define FALSE 0
Зачем такой пессемизм.Ну голимые сишные вызовы будут вызываться, а вот дальнейшее дёргание C++ классов-методов уже не проканает
У меня немного другая ситуация - я начал собирать DLL по руководству:aav8 wrote:Компильнулись...Просто интересует вопрос - компильнутся ли исходники OneWireDebugger...
в vsm.hpp закоментил определение для _int64
Я взя пример с kasus.ru.У меня немного другая ситуация - я начал собирать DLL по руководству:
Creation VSM - Modelos Digitales.PDF, поскольку проверил сразу готовую
DLL-ку от KAZUS.RU -=- OneWireDebugger.dll, и она у меня под Proteus
выдала ошибку.
А у них эта DLL - полностью рабочая...
Когда у тебя компильнулась - тоже создал проект по исходникам OneWireDebugger,
но при компиляции куча ошибок вылезла. Причем каких-то явно глупых и связанных,
скорее, с ситаксисом.
Поэтому стал набирать по кусочкам исходник для OURDEV.DLL, но он тоже сейчас
подглюкивает при сборке...
У тебя какая версия самого Proteus? Моя - Release 6.7 SP3 with Advanced Simulation.
Я вот думаю - не слишком ли старовата....
Я в Борланде в этот раз делал немного по-другому, нежели я обычно пишу DLL-ки:aav8 wrote:В борланде для экспорта функции нужны другие ключи.
Code: Select all
EXPORTS
; VC funcname = BCB funcname
createdsimmodel = _createdsimmodel
deletedsimmodel = _deletedsimmodel
Я предпочитаю визардами не пользоваться, и ручкамиРаботает правильно... Хотя обычно я делаю проект для DLL несколько иначе...
Про COM в VSMSDK.HLP написано вот что:aav8 wrote:Даже при поверхностном просмотре VSM.HPP, видно что связь Proteusa
с моделями практически тот-же COM.
Так что COM - какой-то не совсем COM...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.
Я давно собирался заняться цифровыми моделями Proteus и собирал материалы для этого...aav8 wrote:Есть некоторое подозрение, что VSM.HPP для каждой весии свой...
Я тоже обычно делаю всё вручную, но обычно я никогда не старался добиться совместимостиaav8 wrote:Я предпочитаю визардами не пользоваться, и ручками
прописываю _sddcall и _export.
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.
Ест-но не совсем и даже совсем ни COM, а принципТак что COM - какой-то не совсем COM.
Ну нигде нет явного ограничения, что только VC++ достоин для компиляции DLL для Proteusa...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...