powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как найти функцию по ее имени?
17 сообщений из 67, страница 3 из 3
Как найти функцию по ее имени?
    #39716280
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я правильно понял, что задача с кодировками не решаема?
...
Рейтинг: 0 / 0
Как найти функцию по ее имени?
    #39716294
Котовасия
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты можешь скриншот приложить со списком экспортируемых функций модуля?

Sergey_rbЯ правильно понял, что задача с кодировками не решаема?
Решаема.
Разными методами. Методом перебора, метод ветвей и границ, метод эластичной сети, метод отжига - много их.

А что за "задача с кодировками"? Ну вот кто, кроме тебя может знать опции твоего проекта?
...
Рейтинг: 0 / 0
Как найти функцию по ее имени?
    #39716342
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КотовасияТы можешь скриншот приложить со списком экспортируемых функций модуля?

Sergey_rbЯ правильно понял, что задача с кодировками не решаема?
Решаема.
Разными методами. Методом перебора, метод ветвей и границ, метод эластичной сети, метод отжига - много их.

А что за "задача с кодировками"? Ну вот кто, кроме тебя может знать опции твоего проекта?

Тот, кто умеет читать

Код: plaintext
1.
/nologo /W3 /Zi /Od /D "DEBUG" /D "ARM" /D "_ARM_" /D "ARMV4" /D UNDER_CE=$(CEVersion) /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "UNICODE" /D "_UNICODE" /Fp"ARMV4Dbg/eTest3.pch" /Yu"stdafx.h" /Fo"ARMV4Dbg/" /Fd"ARMV4Dbg/" /M$(CECrtMTDebug) /c 
...
Рейтинг: 0 / 0
Как найти функцию по ее имени?
    #39716354
blonduser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TТак работает внутри EXE
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
extern "C" __declspec(dllexport) void test_exp(const char* text) {
	printf("%s\n", text);
}

int main(){

	typedef void(__cdecl *p_test_exp)(const char*);
	p_test_exp test_exp_fn = (p_test_exp)GetProcAddress(GetModuleHandle(NULL), "test_exp");
	if (test_exp_fn == NULL) {
		printf("test_exp_fn() not found \n");
		return 1;
	}
	test_exp_fn("OK");
	return 0;
}



Сделал как описано выше. В UNICODE все работает без L/
...
Рейтинг: 0 / 0
Как найти функцию по ее имени?
    #39716360
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня без L не компилируется
...
Рейтинг: 0 / 0
Как найти функцию по ее имени?
    #39716361
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blonduserDima TТак работает внутри EXE
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
extern "C" __declspec(dllexport) void test_exp(const char* text) {
	printf("%s\n", text);
}

int main(){

	typedef void(__cdecl *p_test_exp)(const char*);
	p_test_exp test_exp_fn = (p_test_exp)GetProcAddress(GetModuleHandle(NULL), "test_exp");
	if (test_exp_fn == NULL) {
		printf("test_exp_fn() not found \n");
		return 1;
	}
	test_exp_fn("OK");
	return 0;
}



Сделал как описано выше. В UNICODE все работает без L/
Как ни странно у меня тоже работает в MSVC2017. К сожалению не могу затестить в других компиляторах от MS, но судя по ошибкам у ТС 21701299 , другие компиляторы MS считают по другому.
...
Рейтинг: 0 / 0
Как найти функцию по ее имени?
    #39716364
blonduser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TКак ни странно у меня тоже работает в MSVC2017. К сожалению не могу затестить в других компиляторах от MS, но судя по ошибкам у ТС 21701299 , другие компиляторы MS считают по другому.
У меня 2012
...
Рейтинг: 0 / 0
Как найти функцию по ее имени?
    #39716389
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbКотовасияТы можешь скриншот приложить со списком экспортируемых функций модуля?

пропущено...

Решаема.
Разными методами. Методом перебора, метод ветвей и границ, метод эластичной сети, метод отжига - много их.

А что за "задача с кодировками"? Ну вот кто, кроме тебя может знать опции твоего проекта?

Тот, кто умеет читать

Код: plaintext
1.
/nologo /W3 /Zi /Od /D "DEBUG" /D "ARM" /D "_ARM_" /D "ARMV4" /D UNDER_CE=$(CEVersion) /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "UNICODE" /D "_UNICODE" /Fp"ARMV4Dbg/eTest3.pch" /Yu"stdafx.h" /Fo"ARMV4Dbg/" /Fd"ARMV4Dbg/" /M$(CECrtMTDebug) /c 

Понимаешь у тех, кто "умеет читать" кто здесь отвечает, таких проблем просто нет...

Потому не умничай, а давай всю инфу, что просят.

Ты же в С++ базовом ни бум бум, не то что в тонкостях системных ньюансов.
...
Рейтинг: 0 / 0
Как найти функцию по ее имени?
    #39716483
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы все на мерседесах студиях, я у меня запорожец Emdedded C++
...
Рейтинг: 0 / 0
Как найти функцию по ее имени?
    #39716512
Котовасия
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbВы все на мерседесах студиях, я у меня запорожец Emdedded C++
То есть, на вопросы ты отвечать не будешь, понятно. Зачем пришел?
...
Рейтинг: 0 / 0
Как найти функцию по ее имени?
    #39716588
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КотовасияSergey_rbВы все на мерседесах студиях, я у меня запорожец Emdedded C++
То есть, на вопросы ты отвечать не будешь, понятно. Зачем пришел?

Я уже на все ответил.

Без буквы L не компилируется, а с буквой L не находит функцию по имени.

Функция экспортируется, файл со скрином приложил.

Какие еще были вопросы?
...
Рейтинг: 0 / 0
Как найти функцию по ее имени?
    #39716608
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TТак работает внутри EXE
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
extern "C" __declspec(dllexport) void test_exp(const char* text) {
	printf("%s\n", text);
}

int main(){

	typedef void(__cdecl *p_test_exp)(const char*);
	p_test_exp test_exp_fn = (p_test_exp)GetProcAddress(GetModuleHandle(NULL), "test_exp");
	if (test_exp_fn == NULL) {
		printf("test_exp_fn() not found \n");
		return 1;
	}
	test_exp_fn("OK");
	return 0;
}


Разве тут не __declspec(dllimport) должно быть? Хотя это не внешняя dll, но все же
...
Рейтинг: 0 / 0
Как найти функцию по ее имени?
    #39716617
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbКакие еще были вопросы?

Был вопрос почему ты не сделаешь точно так же как в Delphi, поскольку в Си тоже есть
процедурные типы.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как найти функцию по ее имени?
    #39716621
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rb,

не надо смотреть Тоталом - он декорирование убирает

посмотри в бинарном виде содержимое (раз Юникодный проект, то буквы будут чередоваться через 0)

или есть есть в той версии >dumpbin /exports test64.exe
...
Рейтинг: 0 / 0
Как найти функцию по ее имени?
    #39716645
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я просто оставлю здесь этот код, написанный за пять минут.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
#include <stdio.h>
#include <string.h>

void foo(int x)
{
  printf("foo(%d)\n", x);
}

void bar(int x)
{
  printf("bar(%d)\n", x);
}

typedef void func(int x);

struct func_match
{
  const char* name;
  func* f;
};

func_match list[] = {{"foo", foo}, {"bar", bar}, {NULL, NULL}};

void call(const char* name, int x)
{
  for (int i = 0; list[i].name != NULL; i++)
  {
    if (strcmp(list[i].name, name) == 0)
    {
      list[i].f(x);
      return;
    }
  }
  printf("cannot call %s(%d)\n", name, x);
}

int main()
{
  call("foo", 1);
  call("bar", 2);
  call("shit", 666);
}

...
Рейтинг: 0 / 0
Как найти функцию по ее имени?
    #39716664
blonduser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rb,

Такой вариант не пробовали
Код: plaintext
1.
2.
3.
4.
5.
6.
#ifndef UNDER_CE
string f_name = ANSI(func_name);
FARPROC f = GetProcAddress(h, f_name.data());
#else
FARPROC f = GetProcAddress(h, func_name);
#endif



Взято тут
...
Рейтинг: 0 / 0
Как найти функцию по ее имени?
    #39716790
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbВозникла необходимость поиска функции по ее имени

Ты функцию-то нашёл?
...
Рейтинг: 0 / 0
17 сообщений из 67, страница 3 из 3
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как найти функцию по ее имени?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]