(я знаю, что оно старое, но, возможно, некоторые другие тоже обращаются к нему)
Скорее всего, имя функции искажено в C ++ DLL.У меня была такая же проблема, и я смог ее решить, перекомпилировав dll.Вкратце:
Если вы экспортируете из C ++ что-то вроде:
void __stdcall foo()
, вы получите функцию с именем (Visual Studio):
?foo@@YGXXZ
Чтобы предотвратить искажение имениВы должны использовать экспортную директиву "C".Пример (Visual Studio)
extern "C" __declspec( dllexport ) void __stdcall foo()
Однако я обнаружил, что Visual Studio будет продолжать искажаться, и вы получите что-то вроде:
_foo@0
Единственный способ, которым я смог получить чистые именаобъясняется здесь: C ++ DLL Export: декорированные / искаженные имена
И виновник действительно __stdcall.Если вы удалите это из своего объявления:
extern "C" __declspec( dllexport ) void foo()
, вы снова получите чистый экспорт, даже без файла DEF.IMO, это должно быть достаточно хорошо, так как код выше объявляет экспортируемую функцию "C" и соглашение о вызовах по умолчанию для C - это stdcall.Однако у меня не было времени и возможности проверить это, поскольку добавить файл DEF намного проще, чем перемещаться по коду asm и проверять указатели стека:)