error C3861: '...': identifier not found Вроде все включил, а не компилируется.

Дмитрий77
Дата: 02.07.2015 06:25:44
// aspr_api.h : Defines API functions.
//

#ifndef ASPR_API_H
#define ASPR_API_H
...
#ifdef __BORLANDC__
...
#else
 extern "C" BOOL  __stdcall GetRegistrationInformation( BYTE ModeId, char** Key, char** Name);
 extern "C" char* __stdcall GetHardwareID();
 extern "C" char* __stdcall GetHardwareIDEx( BYTE ModeID );
...
#endif

#endif

Ну и собственно код, попытался вычленить суть:

/*
 * main_process.cxx
...
 */
...
#include "include/aspr_api.h" 
#pragma comment(lib,"include/aspr_ide.lib") 
...
//ниже типа глобальные переменные
char*	UserInfo = "";
char*	Key = "";
char*	HardwareID = "";
char*	OldHardwareID = "";

/////////////////////////////////////////////////////////////////////////////
class ProgaName : public PProcess
{
  PCLASSINFO(ProgaName, PProcess)

  public:
    ProgaName();

    void Main();

  protected:
    PBoolean Initialise();
};

PCREATE_PROCESS(ProgaName);
///////////////////////////////////////////////////////////////
ProgaName::ProgaName()
  : PProcess("ProgaName", "BlaBlaBla",
             MAJOR_VERSION, MINOR_VERSION, BUILD_TYPE, BUILD_NUMBER)
{
}

void ProgaName::Main()
{
  HardwareID = GetHardwareIDEx(2);
  OldHardwareID = GetHardwareID();
  GetRegistrationInformation(0, &Key, &UserInfo);
...

Go To Definition/Go To Declaration - для всех 3-х функций в aspr_api.h перепрыгивает, т.е. видит
а компиляция выдает:
автор
1>..\main_process.cxx(189) : error C3861: 'GetHardwareIDEx': identifier not found
1>..\main_process.cxx(190) : error C3861: 'GetHardwareID': identifier not found
1>..\main_process.cxx(191) : error C3861: 'GetRegistrationInformation': identifier not found


Если продублировать заголовки функций в .cxx файле (в правильности чего сомневаюсь)
...
extern "C" char* __stdcall GetHardwareID();
extern "C" char* __stdcall GetHardwareIDEx( BYTE ModeID );
extern "C" BOOL  __stdcall GetRegistrationInformation( BYTE ModeId, char** Key, char** Name);
//ниже типа глобальные переменные
char*	UserInfo = "";
...

, то имеем
1>Linking...
1>main_process.obj : error LNK2019: unresolved external symbol _GetRegistrationInformation@12 referenced in function "public: virtual void __thiscall ProgaName::Main(void)" (?Main@ProgaName@@UAEXXZ)
1>main_process.obj : error LNK2019: unresolved external symbol _GetHardwareID@0 referenced in function "public: virtual void __thiscall ProgaName::Main(void)" (?Main@ProgaName@@UAEXXZ)
1>main_process.obj : error LNK2019: unresolved external symbol _GetHardwareIDEx@4 referenced in function "public: virtual void __thiscall ProgaName::Main(void)" (?Main@ProgaName@@UAEXXZ)


Ну, т.е. мне надо получить HardwareID, OldHardwareID, Key, UserInfo через API определенные в aspr_api.h
дабы оперировать ими в ProgaName::Main()


Где косяк?
MasterZiv
Дата: 02.07.2015 07:51:56
Дмитрий77,

не подключил объектные модели или библиотеки с этими функциями.
Дмитрий77
Дата: 02.07.2015 08:18:10
MasterZiv,

везде самая верхушка .cxx

Так ругается:
#include "include/aspr_api.h" 
#pragma comment(lib,"include/aspr_ide.lib")

#include <ptlib.h>
...

Так ругается:
#include "include/aspr_api.h" 
#pragma comment(lib,"../include/aspr_ide.lib")

#include <ptlib.h>
...

Так ругается:
#include <ptlib.h>

#include "include/aspr_api.h" 
#pragma comment(lib,"include/aspr_ide.lib")
...

Так взяло и скомпилировалось ни с того ни с сего:
#include <ptlib.h>

#include "include/aspr_api.h" 
#pragma comment(lib,"../include/aspr_ide.lib")
...

Что интересно, aspr_api.h и aspr_ide.lib лежат в одной и той же include папке и хз как последовательность может влиять.
Если нижний вариант заработает после доводки и защиты (предполагаю что ДА раз компильнулось), даже не хочу знать почему.
Дмитрий77
Дата: 02.07.2015 08:35:25
Насколько я понимаю, объектный модуль aspr_ide.lib нужен только для того чтоб скомпилировалось, ну и для организации каких-то там дебагов в IDE если надо, а вся реальная кухня пристыковывается на момент защиты файла.

автор
Новый API реализован посредством стандартных импортируемых функций. ASProtect 32 просматривает секцию с таблицей импортов модуля и ищет некоторые заранее заданные имена. Когда модуль загружается, ASProtect 32 эмулирует все найденные API-функции.
Вам необходимо защитить приложение или эмулировать API-функции с помощью ASProtect IDE, для того чтобы использовать ASProtect 32 API!