Proteus C++ DLL's

Использование и разработка софта (преимущественно на ПЦ)

Moderator: Shaos

User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Слушай, есть ещё один тонкий момент - лицензирование модели...
Я так прочитал, что оно осуществляется вот в этот момент:

Code: Select all

extern "C" IACTIVEMODEL * __export createactivemodel (CHAR *device, ILICENCESERVER *ils)
// Exported constructor for active component models.
 { 
   if (ils->authorize (READOUT_KEY))
      return new READOUT;
    else
      return NULL;
 }
то есть, обязательно должно отработать: ils->authorize (READOUT_KEY)
Пишут, что если авторизация не прошла - модель дальше работать не будет:
The creatactivemodel function must also authorize the model using the ILICENCSERVER interface.
If a model fails to authorize correctly, it will not receive any further service from the simulator.
У меня ils->authorize (READOUT_KEY) вешается.
Я пробовал её обойти и сразу: return new READOUT;
У тебя срабатывает ils->authorize (READOUT_KEY)?
iLavr
aav8
Maniac
Posts: 287
Joined: 05 Nov 2008 19:47
Location: 81.28.208.238

Post by aav8 »

то есть, обязательно должно отработать: ils->authorize (READOUT_KEY)
Пишут, что если авторизация не прошла - модель дальше работать не будет:
Да у меня тоже тут подвисает...

offtopic {
ни фига не стоит - зато как висит!
}
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Ха-хаааааа... :( ну надо же! :o
Before you can begin developing new models, you will need to obtain an allocation of unique product IDs from us. You can do this by emailing us at info@labcenter.co.uk. We will supply you with a base value from which to allocate Product IDs, and a product key file that enables these IDs for your copy of Proteus VSM.
В ils->authorize (READOUT_KEY) - READOUT_KEY - это и есть unique product IDs! :o
А я его подставляю 0х00000000 .... мда.... :(
Last edited by Lavr on 18 Nov 2012 09:38, edited 2 times in total.
iLavr
aav8
Maniac
Posts: 287
Joined: 05 Nov 2008 19:47
Location: 81.28.208.238

Post by aav8 »

В ils->authorize (READOUT_KEY) - READOUT_KEY - это и есть unique product IDs!
А я его подставляю 0х00000000 .... мда....
В примере от Kazus тоже 0...
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Я при запуске самодельной модели тестирую, в какие файлы она лезет
утилитой filemonitor от Марка Руссиновича from Sysintеrnas.
Ща проверю - если ils->authorize (READOUT_KEY) лезет в LICENCE.DLL,
то я дальше не знаю - что делать... :(

Вот ещё про Product ID:
To make this business model work, it is necessary to ensure that models can only be used when they have been paid for, and this is the role of the Licencing API within Proteus VSM. Essentially, each user of the system is allocated a Customer ID, which is unique to their copy and a Customer Key which ties that copy to their name and company details. Potentially we can also tie it to their hardware or OS installation.
Each model that is created is allocated a Product ID which is again unique. Then, to use that model on a given installation, the customer is issued with a Product Key. This key is a signature of the Customer ID and the Product ID, and validates that the model can be used with that particular installation of the software.
На Казусе - у них есть Product ID, поэтому бывает их модели и не работают у других...
Собственно поэтому я и хотел научиться делать свои цифровые модели...
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Lavr wrote:Ща проверю - если ils->authorize (READOUT_KEY) лезет в LICENCE.DLL,
то я дальше не знаю - что делать... :(
Нет - вроде как не лезет...

Code: Select all

12665  19:59:36  Isis  Read  C:\PROGRAM FILES\LABCENTER ELECTRONICS\PROTEUS 6 PROFESSIONAL\MODELS\OURDEV.DLL  SUCCESS  Offset: 92672 Length: 512
12666  19:59:36  Isis  Attributes  C:\WINDOWS\MEDIA\NOTIFY.WAV  SUCCESS  GetAttributes
12667  19:59:36  Isis  Open  C:\WINDOWS\MEDIA\NOTIFY.WAV  SUCCESS  OPENEXISTING READONLY DENYNONE
12668  19:59:36  Isis  Ioctl  C:  SUCCESS  Subfunction: 08h
12669  19:59:36  Isis  Attributes  C:\WINDOWS\MEDIA\NOTIFY.WAV  SUCCESS  Get Modify
12670  19:59:36  Isis  Close  C:\WINDOWS\MEDIA\NOTIFY.WAV  SUCCESS  CLOSE_FINAL
12671  19:59:44  Isis  Read  C:\PROGRAM FILES\LABCENTER ELECTRONICS\PROTEUS 6 PROFESSIONAL\MODELS\OURDEV.DLL  SUCCESS  Offset: 58880 Length: 4096
12672  19:59:44  Isis  Read  C:\PROGRAM FILES\LABCENTER ELECTRONICS\PROTEUS 6 PROFESSIONAL\BIN\PROSPICE.DLL  SUCCESS  Offset: 269312 Length: 4096
12673  19:59:44  Isis  Read  C:\PROGRAM FILES\LABCENTER ELECTRONICS\PROTEUS 6 PROFESSIONAL\BIN\SPICESIM.DLL  SUCCESS  Offset: 719872 Length: 4096
12674  19:59:44  Isis  Read  C:\PROGRAM FILES\LABCENTER ELECTRONICS\PROTEUS 6 PROFESSIONAL\BIN\PROSPICE.DLL  SUCCESS  Offset: 58880 Length: 4096
12675  20:00:28  MSGSRV32  Attributes  C:\WINDOWS\USER.DAT  SUCCESS  SetAttributes
NOTIFY.WAV - это MessageBox("Выполняется обращение [authorize(model_key)]!")
OURDEV.DLL - обращается в PROSPICE.DLL , значит вызов ils->authorize (READOUT_KEY)
сработал...
PROSPICE.DLL вызвала SPICESIM.DLL и повисла...
aav8 wrote:На работе есть студия 2010 попробую на ней,
но в результате не уверен.
Попробуй компильни в студии 2010... мне все же кажется, ils->authorize (READOUT_KEY)
не должна вешать Proteus, а хотя бы должна вернуться с ошибкой...

vsm.hpp - получается, что это интерфейс к PROSPICE.DLL?
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Lavr wrote:DLL-ку от KAZUS.RU проверил сразу готовую - OneWireDebugger.dll,
и она у меня под Proteus выдала ошибку.
Хотя у них эта DLL - полностью рабочая... :-?
Ошибка вот такая:

Code: Select all

SIMULATION LOG
==============

Reading netlist...
FATAL: [OD1] External model DLL "OneWireDebugger.DLL" not found. GLE=0x0000001F.

Simulation FAILED due to fatal simulator errors.
Мне кажется, у меня нету MSVCR90D.DLL, потому что если нет самой OneWireDebugger.DLL,
то ошибка другая:

Code: Select all

SIMULATION LOGS
===============
...
FATAL: [OD1] External model DLL "OneWireDebugger.DLL" not found. GLE=0x00000002.
Simulation FAILED Due To Fatal Simulator Errors.
Я из их исходников пересобрал OneWireDebugger.DLL под Борландом, у него
та же болячка: ils->authorize (READOUT_KEY) вешается... :(
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Хотя, я смотрю, - и у товарищей с KAZUS.RU с их новыми и лицензионными (местами) Proteus-ами одни и те же цифровые модели у одних - работают, а у других - нет... :-?
OttoStirliz wrote:Согласно Уставу Labcenter, лицензируется не только Proteus, но и модели.
Поскольку TM128X64OLED где-то работает, а где-то нет, я могу предположить,
что работает у тех, кто имеет на нее лицензию.
http://www.tanu-sha.narod.ru/ts128x64.jpg

А модели в принципе - симпатичные! :kruto:
iLavr
aav8
Maniac
Posts: 287
Joined: 05 Nov 2008 19:47
Location: 81.28.208.238

Post by aav8 »

Попробуй компильни в студии 2010... мне все же кажется, ils->authorize (READOUT_KEY)
не должна вешать Proteus, а хотя бы должна вернуться с ошибкой...
После студии заработало с исходниками от KAZUS...
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

aav8 wrote:
Попробуй компильни в студии 2010... мне все же кажется, ils->authorize (READOUT_KEY)
не должна вешать Proteus, а хотя бы должна вернуться с ошибкой...
После студии заработало с исходниками от KAZUS...
Ну это как бы нас не удивило... :lol:

Удивляет, что студия делает файл OneWireDebugger.DLL в 35 кБайт,
а Борланд Билдер - в 105 кБайт, да он ещё и виснет! :o
iLavr
aav8
Maniac
Posts: 287
Joined: 05 Nov 2008 19:47
Location: 81.28.208.238

Post by aav8 »

Удивляет, что студия делает файл OneWireDebugger.DLL в 35 кБайт,
а Борланд Билдер - в 105 кБайт, да он ещё и виснет!
У меня получилось 149 кб.
Но если на него напустить tdstrp32 получается 38кб.
Но c Proteus-ом позанимаюсь.
Благо что есть с чем сравнивать.
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

aav8 wrote:У меня получилось 149 кб.
Но если на него напустить tdstrp32 получается 38кб.
Спасибо за подсказку, а то давно напрягало, что Борланд это не хочет делать сам...
However, if you prefer to use the integrated linker, always enable debug information. There is no run-time overhead if debug information is included in a PE file. If desired, the debug information can be removed after linking using Borland's command line utility Tdstrp32.exe.
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

aav8 wrote:Есть некоторое подозрение, что VSM.HPP для каждой весии свой...
Ты оказался прав! Я посмотрел на KAZUS.RU - обсуждали этот момент!

Самый последний доступный вариант VSM.HPP должен иметь вот такую строчку:

Code: Select all

#define VSM_API_VERSION  110
Но у нас он такой и есть. После этой версии VSM SDK стал доступен ограниченно...
iLavr
aav8
Maniac
Posts: 287
Joined: 05 Nov 2008 19:47
Location: 81.28.208.238

Post by aav8 »

Краткий отчет:
Сделал тестовый пример и рассмотрел под
микроскопом как вызываются функции.
В функции члена класса кроме параметров
передается и ссылка на лбъект класса.
Borland так и поступает - складывает парамеры в стек,
и тоже в стек вставляет ссылку на объект.
VS тоже кладет парвметры в стек, а ссылку на объект
запихивает в регистр ECX и/или EDX - точно еще не понял.
--- в этом Shaos оказался прав - не полной совместимости ---
А вот если функция-член явно описана с
видом вызова ( _stdcall, _cdecl ) ...
VS правильно складывает параметры в стек, и тоже в стек
помещает ссылку на объект.
Поэтому когда мы вызываем из Borlande Proteus,
му ему передаем в authorize два параметра и ссылку на
объект (в стеке), а Proteus ждет два параметра в стеке, и
ссылку на объект в регистрах.
Вот и причина зависания.
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

aav8 wrote:Поэтому когда мы вызываем из Borlande Proteus,
му ему передаем в authorize два параметра и ссылку на
объект (в стеке), а Proteus ждет два параметра в стеке, и
ссылку на объект в регистрах.
Вот и причина зависания.
Ну ты гигант! :o :kruto:

А мы никак не сможем это подправить или обойти?


PS. А что ты юзал в качестве "микроскопа"? :wink:
iLavr