Verholom
09-07-2014, 19:31
Сейчас экспериментирую с экспортом из библиотечки, написанной на сабжевом языке... Это обертка для вызова DeviceIOControl в VB.NET/C#. Собственно, те, кому она писалась,
работают с ней, но в управляемом коде. Все дальнейшее - мои эксперименты.
Проблема в линковании тестовой программы с *.lib, создаваемой при компиляции библиотеки. Студия вылетает с таким исключением:
LINK : fatal error LNK1000: Internal error during IMAGE::BuildImage
1>
1> Version 12.00.21005.1
1>
1> ExceptionCode = C0000096
1> ExceptionFlags = 00000000
1> ExceptionAddress = 00182DD3 (00110000) "C:\Program Files\Microsoft Visual Studio 12.0\VC\bin\link.exe"
1> NumberParameters = 00000000
...
Причем, если я динамически гружу библиотечку (LoadLibrary) и GetProcAddress на все нужные имена, то все работает на ура. А вот со статической линковкой - беда.
Возможно причина в том, что я экспортирую функцию, возвращающую созданный экземпляр управляемого класса:
DriveUtils::Device^ drv_open(wchar_t*);
Она - обертка, создающая экземпляр управляемого класса. Остальные экспортируемые имена - тоже обертки и работают с этим классом. Собсна, она одна такая, остальные - все ок. Я не нашел способа , как вернуть void* вместо управляемого класса. Тогда, думаю, проблем не было бы...
От такие извращения...
работают с ней, но в управляемом коде. Все дальнейшее - мои эксперименты.
Проблема в линковании тестовой программы с *.lib, создаваемой при компиляции библиотеки. Студия вылетает с таким исключением:
LINK : fatal error LNK1000: Internal error during IMAGE::BuildImage
1>
1> Version 12.00.21005.1
1>
1> ExceptionCode = C0000096
1> ExceptionFlags = 00000000
1> ExceptionAddress = 00182DD3 (00110000) "C:\Program Files\Microsoft Visual Studio 12.0\VC\bin\link.exe"
1> NumberParameters = 00000000
...
Причем, если я динамически гружу библиотечку (LoadLibrary) и GetProcAddress на все нужные имена, то все работает на ура. А вот со статической линковкой - беда.
Возможно причина в том, что я экспортирую функцию, возвращающую созданный экземпляр управляемого класса:
DriveUtils::Device^ drv_open(wchar_t*);
Она - обертка, создающая экземпляр управляемого класса. Остальные экспортируемые имена - тоже обертки и работают с этим классом. Собсна, она одна такая, остальные - все ок. Я не нашел способа , как вернуть void* вместо управляемого класса. Тогда, думаю, проблем не было бы...
От такие извращения...