Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
RealMogAika
2 / 2 / 0
Регистрация: 02.05.2013
Сообщений: 8
#1

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

02.05.2013, 00:44. Просмотров 431. Ответов 2
Метки нет (Все метки)

Имеется класс 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ый час мучаюсь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.05.2013, 00:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос static указатель на метод (LNK2001) (C++):

В функцию-метод передать указатель на другую функцию-метод и вызвать через переданный указатель - C++
Друзья! Всем привет. Вот код: class otets { public: void f (void (otets::*p)()); private: void echo_f (){}; ...

Функция, получающая указатель на обычную функцию, получает указатель на метод класса - C++
Здравтсвуйте. Имеется вопрос по указателям на методы класса. Допустим, есть функция( f ), которая принимает указатель на функцию и...

Вызвать метод через указатель на метод - C++
class MenuItem { public: MenuItem(string name, MenuItem *parent = nullptr, void(MenuItem::*EventHadler)() = nullptr, bool isSelected...

Может ли быть метод virtual static? И почему? - C++
Очень нужно объяснение! В интернете ничего конкретно про это не написано.

Есть метод класса внутри , есть проверка. Если условие сходится то метод должен выдать указатель, иначе булевую переменную - C++
Есть метод класса внутри которого, посередине, есть проверка. Если условие сходится то метод должен выдать указатель на вектор, а если нет...

Как передать в метод класса Menu указатель на метод дочернего класса? - C++
Как передать в метод базового класса указатель на метод дочернего: class Menu() { protected: setCallback(*********); //...

2
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
02.05.2013, 01:08 #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;
}
1
RealMogAika
2 / 2 / 0
Регистрация: 02.05.2013
Сообщений: 8
02.05.2013, 01:20  [ТС] #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;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.05.2013, 01:20
Привет! Вот еще темы с ответами:

Указатель на метод - C++
#include &lt;iostream&gt; using namespace std; class random { public: void f(){cout&lt;&lt;&quot;Sound&quot;&lt;&lt;endl;} ...

Указатель на метод - C++
Добрый день. void (MyClass::*func)(const String&amp;) = MyClass::someMethod&lt;MyClass::All&gt;; Создал указатель на метод из класса MyClass. ...

Указатель на метод - C++
struct abc{ int a; int b; int c; abc(int na = 0, int nb = 0, int nc = 0):a(na),b(nb),c(nc){}; bool conf(int d){ ...

Указатель на виртуальный метод - C++
По мотивам какого-то вопроса тут возник вопрос, ответ на который я что-то не придумал. Как взять указатель на метод базового класса, если...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru