Исходя из моего предыдущего вопроса , касающегося отладки нативного кода, я решил создать простой тест из консольного приложения, так как мне не удавалось нигде отладить сервис напрямую.
Итак, я создал консольное приложение vc6, добавил проект dll в рабочую область и запустил его.
Вместо выполнения, как ожидалось, он выдал следующие ошибки компоновщика:
main.obj : error LNK2001: unresolved external symbol "int __stdcall hmDocumentLAdd(char *,char *,long,char *,char *,long,long,long,long *)" (?hmDocumentLAdd@@YGHPAD0J00JJJPAJ@Z)
main.obj : error LNK2001: unresolved external symbol "int __stdcall hmGetDocBasePath(char *,long)" (?hmGetDocBasePath@@YGHPADJ@Z)
Debug/HazManTest.exe : fatal error LNK1120: 2 unresolved externals
Кажется, это простой случай, когда вы что-то забыли в настройках компоновщика: однако все выглядит нормально, и файл lib, dll и source доступны. Если я изменю файл lib для загрузки на бессмыслицу, он поднимает fatal error LNK1104: cannot open file "asdf.lib"
, так что это не проблема.
Я ранее связывался с dll, и они только что сработали, так что я забыл сделать?
Обновление : Согласно этой теме Я посмотрел, могу ли я узнать какую-либо дополнительную информацию. Это то, что дает мне свалка от VS2005.
> dumpbin /linkermember Hazardman.lib | findstr "DocumentLAdd"
F6DC __imp__hmDocumentLAdd@36
F6DC _hmDocumentLAdd@36
5B __imp__hmDocumentLAdd@36
5B _hmDocumentLAdd@36
Если запустить его через undname, получится:
> undname ?_hmDocumentLAdd@36
Microsoft (R) C++ Name Undecorator
Copyright (C) Microsoft Corporation. All rights reserved.
Undecoration of :- "?_hmDocumentLAdd@36"
is :- "?_hmDocumentLAdd@36"
Что не так. Если я добавлю искаженное имя из IDE, это даст намного лучший результат:
> undname ?hmDocumentLAdd@@YGHPAD0J00JJJPAJ@Z
Microsoft (R) C++ Name Undecorator
Copyright (C) Microsoft Corporation. All rights reserved.
Undecoration of :- "?hmDocumentLAdd@@YGHPAD0J00JJJPAJ@Z"
is :- "int __stdcall hmDocumentLAdd(char *,char *,long,char *,char *,long,long,l
ong,long *)"
Теперь у меня есть эта информация, что я могу с ней сделать? Из этой статьи Раймонда Чена я могу исправить это вручную, но настраиваю опцию, но я не могу понять из своих результатов, какая опция нужна (есть ли флажок «игнорировать все параметры» ?!) ,
Так что кажется, что он ищет несуществующие функции или параметры функции были пропущены (или свалке не нравятся библиотеки VC6), но это все еще не приближает меня к моей цели исправления моего проблема.