Форум программистов, компьютерный форум CyberForum.ru

static указатель на метод (LNK2001) - C++

Восстановить пароль Регистрация
 
RealMogAika
 Аватар для RealMogAika
2 / 2 / 0
Регистрация: 02.05.2013
Сообщений: 8
02.05.2013, 00:44     static указатель на метод (LNK2001) #1
Имеется класс A, один из его методов B(int a) нужно указать напрямую (по адресу).
Делал так:
C++
1
2
3
4
5
6
7
8
9
10
11
#include "windows.h"
 
class A {
public:
    static void (__thiscall* B)( int a);    
};
 
void main()
{ 
    A::B = (void (__thiscall*)(int a))(0x12345678);
}
Вылезает ошибка от линковщика:
main.obj : error LNK2001: неразрешенный внешний символ ""public: static void (__thiscall* A::B)(int)" (?B@A@@2P6EXH@ZA)"
fatal error LNK1120: 1 неразрешенных внешних элементов

Помогите решить эту проблему, уже 4ый час мучаюсь.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.05.2013, 00:44     static указатель на метод (LNK2001)
Посмотрите здесь:

C++ В функцию-метод передать указатель на другую функцию-метод и вызвать через переданный указатель
Есть метод класса внутри , есть проверка. Если условие сходится то метод должен выдать указатель, иначе булевую переменную C++
константный метод и указатель this C++
Указатель на метод класса! C++
C++ Указатель на метод класса
Указатель на метод C++
Функция, получающая указатель на обычную функцию, получает указатель на метод класса C++
C++ Как передать в метод класса Menu указатель на метод дочернего класса?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
02.05.2013, 01:08     static указатель на метод (LNK2001) #2
Подозреваю, что статичная переменная должна быть инициализирована. Кстати, чтобы понизить градус неадеквата и уменьшить зашкаливающее количество спецсимволов, можно объявить тайпдеф на указатель на функцию.

Отак собирается.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
 
class A {
 public:
  typedef void (*FunctionPointer)(int);
  static FunctionPointer b;
};
// пыщ
A::FunctionPointer A::b = NULL;
 
int main() {
  A::b = (A::FunctionPointer)(0x12345);
  return 0;
}
Добавлено через 2 минуты
Без тайпдефа страшненько.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
 
class A {
 public:
  static void (*b)(int);
};
 
void (*A::b)(int) = NULL;
 
int main() {
  A::b = (void (*)(int))(0x12345);
  return 0;
}
RealMogAika
 Аватар для RealMogAika
2 / 2 / 0
Регистрация: 02.05.2013
Сообщений: 8
02.05.2013, 01:20  [ТС]     static указатель на метод (LNK2001) #3
Цитата Сообщение от lemegeton Посмотреть сообщение
Подозреваю, что статичная переменная должна быть инициализирована. Кстати, чтобы
Без тайпдефа страшненько.
В итоге я должен получить нечто такое:
C++
1
CDXUTDialog::AddButton = (HRESULT (__thiscall*)( int ID, LPCTSTR strText, int x, int y, int width, int height, UINT nHotkey, bool bIsDefault, DWORD ppCreated ))(pSAMP + 0x0A0B20);
Кстати, твой код компилируется, но когда переделал под свой лад, то все-равно летят эрроры.

Добавлено через 2 минуты
Ладно, пока реализую по еврейски:
C++
1
2
3
4
5
6
7
DWORD func = pSAMP + 0x0A0B20;
_asm {
push ...;
push ...;
mov ecx, [this];
call func;
}
Yandex
Объявления
02.05.2013, 01:20     static указатель на метод (LNK2001)
Ответ Создать тему
Опции темы

Текущее время: 22:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru