Проблема со связью при вызове функций-членов из сторонних DLL - PullRequest
0 голосов
/ 21 февраля 2019

Я пытаюсь импортировать общую библиотеку проекта GameAnalytics.Я использую свою собственную систему сборки и, кроме некоторых предупреждений, все прошло нормально, и я получаю .dll, .lib (импорт lib) и .exp из этой сборки.

Проблема в том, что, по-видимому, ни импорт libни .dll правильно экспортировали символы.Вызов dumpbin с /exports Я вижу, что есть только символы для C-подобных прототипов функций, которые на самом деле являются функциями-членами.Поэтому, когда я пытаюсь использовать эту библиотеку импорта, чтобы найти функции-члены, которые я вызываю в своем коде, я получаю неразрешенные символы.

Поскольку я никогда не импортировал функции-члены C ++ из общей библиотеки, мой вопрос: я что-то упустил?в процессе импорта этой библиотеки?Единственное, что мне приходит в голову, это то, что люди, стоящие за проектом GameAnalytics, не экспортировали должным образом классы и функции-члены.Я читаю некоторые тексты, и кажется, что вам нужно напрямую _export классы и использовать far pointers для функций-членов.

РЕДАКТИРОВАТЬ с dumpbin /exports GameAnalytics.lib output

ordinal hint RVA      name

      1    0 000C6F60 addBusinessEvent
      2    1 000C7180 addBusinessEventJson
      3    2 000C75F0 addDesignEvent
      4    3 000C7690 addDesignEventWithValue
      5    4 000C7740 addErrorEvent
      6    5 000C77E0 addProgressionEvent
      7    6 000C7970 addProgressionEventJson
      8    7 000C7CF0 addProgressionEventWithScore
      9    8 000C7E90 addProgressionEventWithScoreJson
     10    9 000C8220 addResourceEvent
     11    A 000C83C0 addResourceEventJson
     12    B 000C8760 configureAvailableCustomDimensions01
     13    C 000C8940 configureAvailableCustomDimensions02
     14    D 000C8B20 configureAvailableCustomDimensions03
     15    E 000C8D00 configureAvailableResourceCurrencies
     16    F 000C8EE0 configureAvailableResourceItemTypes
     17   10 000C90C0 configureBuild
     18   11 000C9160 configureDeviceManufacturer
     19   12 000C9200 configureDeviceModel
     20   13 000C92A0 configureGameEngineVersion
     21   14 000C9340 configureSdkGameEngineVersion
     22   15 000C93E0 configureUserId
     23   16 000C9480 configureWritablePath
     24   17 000C9520 gameAnalyticsEndSession
     25   18 000C9530 gameAnalyticsStartSession
     26   19 000C9540 getCommandCenterValueAsString
     27   1A 000C9630 getCommandCenterValueAsStringWithDefaultValue
     28   1B 000C97A0 getConfigurationsContentAsString
     29   1C 000C9810 initialize
     30   1D 000C9920 isCommandCenterReady
     31   1E 000C9950 onQuit
     32   1F 000C9960 onResume
     33   20 000C9970 onSuspend
     34   21 000C9980 setBirthYear
     35   22 000C99A0 setCustomDimension01
     36   23 000C9A40 setCustomDimension02
     37   24 000C9AE0 setCustomDimension03
     38   25 000C9B80 setEnabledErrorReporting
     39   26 000C9BB0 setEnabledEventSubmission
     40   27 000C9BE0 setEnabledInfoLog
     41   28 000C9C10 setEnabledManualSessionHandling
     42   29 000C9C40 setEnabledVerboseLog
     43   2A 000C9C70 setFacebookId
     44   2B 000C9D10 setGender

Примерпозвоните в моем коде, который не разрешен компоновщиком:

gameanalytics::GameAnalytics::configureBuild("1.0.0");

Для этого вызова нет декорации (только для C-like configureBuild(), насколько я понимаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...