Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
2 / 2 / 1
Регистрация: 02.05.2013
Сообщений: 8
1

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

02.05.2013, 00:44. Просмотров 598. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.05.2013, 00:44
Ответы с готовыми решениями:

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

error LNK2001: unresolved external symbol "public: static int k
В header файле обьявлен класс, в котором есть статическая переменная public: static int k; Из...

MFC и static указатель в классе
Под него надо динамически выделить память но компилятор ругается class Kniga { private:...

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

2
3050 / 1455 / 492
Регистрация: 29.11.2010
Сообщений: 2,888
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
2 / 2 / 1
Регистрация: 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.05.2013, 01:20

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Указатель на объект или указатель на метод объекта
Здравствуйте! У меня много где случается, что надо классу заводить в заголовке указатель на объект...

Обращение к полю класса/структуры. Указатель с модификатором static
Кто мог бы объяснить, как можно обратиться к указателю с модификатором static, принадлежащему...

Как при создании дочернего окна передать ему указатель на static-переменную в оконной процедуре родительского?
Есть оконная процедура родительского окна, в ней есть static-переменная, например, static...

метод static и форма picturebox
мне нужно использовать pictureBox, checkBox в методах static, но, как известно, они - не...

Как вызвать static метод?
Здравствуйте, есть у меня например такое: class Example { static void Main(string arg) ...

Static-метод не вызывается из пакета
Вот класс: import algorithm.sort.AnotherA; class A { public static void main(String args) {...


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

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

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