Имя: Пароль:
IT
 
Вспомним синтаксис C++ или помогите с присвоением значения переменной
0 Midaw
 
12.11.13
14:21
Есть такой код:

typedef BOOL(FAR *GetDeviceListFuncType) (LPVOID*, int*, LPVOID*, int);

BOOL(FAR* Proba);
LPVOID* aaa1, aaa2;
int* bbb1;
int bbb2;
Proba = GetDeviceListFuncType(aaa1, bbb1, aaa2, bbb2);


Получаю ошибку:

IntelliSense: значение типа "GetDeviceListFuncType" нельзя присвоить сущности типа "BOOL *"


Что сделано неправильно?
1 H A D G E H O G s
 
12.11.13
14:23
(0) Выбран неправильный ЯП.
2 Господин ПЖ
 
12.11.13
14:25
создал новый тип... ну и накуа?
3 Midaw
 
12.11.13
14:27
(2) по идеи это функция из DLL, которую я не знаю как использовать в C++.
4 H A D G E H O G s
 
12.11.13
14:29
(2) Процедурный тип. Он хочет испортировать функцию из dll красивою
5 Кирпич
 
12.11.13
14:31
6 zak555
 
12.11.13
14:33
(1) самый правильный
7 Кирпич
 
12.11.13
14:34
непонимаю, как сюда попадают люди, которые не могут пользоваться интернетом. через голосового оператора какого то чтоли.
8 Кирпич
 
12.11.13
14:45
примерно так

  typedef BOOL (FAR *GetDeviceListFuncType) (LPVOID*, int*, LPVOID*, int);
  HMODULE hLib = GetModuleHandle("MyDll.dll");
  GetDeviceListFuncType GetDeviceList = GetProcAddress(hLib, "GetDeviceListFunc");
  GetDeviceList(a,b,c,d);
9 Кирпич
 
12.11.13
14:46
BOOL x = GetDeviceList(a,b,c,d);
10 Midaw
 
12.11.13
14:50
нуну, раскудахтались.
(5) этот путь то самый верный, но он не взлетел в C#.
сейчас взлетел. но есть другие проблемы. продолжу потом.
(8) спс.
11 Кирпич
 
12.11.13
14:50
но если горит, то к программисту с букетом и бутылкой пива.
12 Midaw
 
12.11.13
15:04
IntelliSense: значение типа "FARPROC" нельзя использовать для инициализации сущности типа "GetDeviceListFuncType"

(11) не горит. для себя родного всё.
13 Кирпич
 
12.11.13
15:10
(12) ну ты хоть выложил свою писанину. или надо ещё угадать чего ты там понаписал?
14 Midaw
 
12.11.13
15:15
(13)
HMODULE hLib = GetModuleHandle("PMDll.dll");
typedef BOOL (FAR *GetDeviceListFuncType) (LPVOID*, int*, LPVOID*, int);
GetDeviceListFuncType pVar = GetProcAddress(hLib, "GetDeviceListFuncType");

ошибка в (12)
15 Кирпич
 
12.11.13
15:30
GetDeviceListFuncType( GetProcAddress(hLib, "GetDeviceListFuncType"));
16 Midaw
 
12.11.13
15:30
Получилось вот так
BOOL (FAR *GetDeviceListFuncType) (LPVOID*, int*, LPVOID*, int);
(FARPROC &)GetDeviceListFuncType = GetProcAddress(hLib, "GetDeviceListFuncType");
BOOL pVar = GetDeviceListFuncType(aaa1, bbb1, aaa2, bbb2);

по примеру из ссылки выше. теперь осталось добить переменные для функции...
17 Кирпич
 
12.11.13
15:31
ага. так тож можно
18 Кирпич
 
12.11.13
15:32
ну судя по
LPVOID* aaa1, aaa2;
int* bbb1;
int bbb2;

тебе еще долго ковыряться :)
19 Кирпич
 
12.11.13
15:34
(FARPROC &)GetDeviceListFuncType = GetProcAddress(hLib, "GetDeviceListFuncType");

НЕПРАВИЛЬНО
20 Midaw
 
12.11.13
15:43
(19) почему и как правильно?
(18) да вот этого мало. пишет
использована неинициализированная локальная переменная "aaa2"
кроме того надо как привести к
public struct LAN_DEVICE
{
[MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 21)]
public String strHostname;//host name or ip address, max 21 chars
[MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 21)]
public String strPort;//port number, max 21 chars
[MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 21)]
public String strPassword;//password, max 21 chars
public bool bEnabled;//flag, if device is enabled
}
21 Кирпич
 
12.11.13
15:48
так правильно
  
GetDeviceListFuncType GetDeviceList = GetDeviceListFuncType(GetProcAddress(hLib, "GetDeviceListFunc"));
  GetDeviceList(a,b,c,d);
22 Кирпич
 
12.11.13
15:49
GetDeviceListFuncType это тип
GetDeviceList это переменная типа GetDeviceListFuncType

ей присваиваем адрес функции
GetDeviceList = GetDeviceListFuncType(GetProcAddress(hLib, "GetDeviceListFunc"));

вызываем функцию

BOOL z = GetDeviceList(a,b,c,d);
23 Кирпич
 
12.11.13
15:51
что должно быть в параметрах, я не знаю.

ну и прежде чем вызывать функцию, проверь, есть она или нет.

if (GetDeviceList == NULL) { ошибка };
24 Кирпич
 
12.11.13
15:52
а еще лучше книжку почитай
25 Кирпич
 
12.11.13
15:53
про указатели особенно
26 Кирпич
 
12.11.13
15:54
27 Midaw
 
12.11.13
15:58
что такое указатель, адрес и ссылка понимание у меня есть...
как перевести в C++ строки из C#? нужен аналог вот этого:
public String strHostname;
28 Кирпич
 
12.11.13
16:03
ты чо вообще делаешь?
29 Кирпич
 
12.11.13
16:04
и откуда тут C#
30 Midaw
 
12.11.13
16:05
(29) Из примеров пытаюсь переделать структуру из C# в C++.
31 Кирпич
 
12.11.13
16:08
нафига переделывать, может просто тупо скопировать или качнуть заголовочный файл?
http://budil.ru/tw_files2/urls_11/47/d-46087/7z-docs/26.pdf
32 Кирпич
 
12.11.13
16:10
понимаю. без интернета плохо.
33 Аденэсниг
 
12.11.13
16:13
(0) напиши нормально. с отступами, комментариями и сам догонишь.
34 Midaw
 
12.11.13
16:15
(31) кроме DLL ничего нету. заголовочный файл сформировать с DLL возможно?
35 Кирпич
 
12.11.13
16:18
чья dll?
36 Ubuntu810
 
12.11.13
16:19
(27) "как перевести в C++ строки из C#? нужен аналог вот этого:
public String strHostname;"

пиши так CString strHostname;
или так  char * strHostname;
или так  char  strHostname[80];
37 Кирпич
 
12.11.13
16:23
(36) не путай его. он и так с трудом вменяемый.
(34)чья dll? для чего dll? короче ищем инструкции.
38 Ubuntu810
 
12.11.13
16:23
(14) "HMODULE hLib = GetModuleHandle("PMDll.dll"); "

может стоит так написать

HINSTANCE hDLL;

....

hDLL = LoadLibrary("PMDll.dll");
39 Ubuntu810
 
12.11.13
16:25
(0) ТС вот тебе пример загрузки длл

HINSTANCE hDLL;               // Handle to DLL
LPFNDLLFUNC1 lpfnDllFunc1;    // Function pointer
DWORD dwParam1;
UINT  uParam2, uReturnVal;

hDLL = LoadLibrary("MyDLL");
if (hDLL != NULL)
{
   lpfnDllFunc1 = (LPFNDLLFUNC1)GetProcAddress(hDLL,
                                           "DLLFunc1");
   if (!lpfnDllFunc1)
   {
      // handle the error
      FreeLibrary(hDLL);
      return SOME_ERROR_CODE;
   }
   else
   {
      // call the function
      uReturnVal = lpfnDllFunc1(dwParam1, uParam2);
   }
}
40 Кирпич
 
12.11.13
16:26
(39) да уже давно загрузили.
проблема уже в другом
41 Ubuntu810
 
12.11.13
16:29
(40) "проблема уже в другом" в чем конкретно?
42 orefkov
 
12.11.13
16:34
А всё-таки верный ответ в (1)
43 Кирпич
 
12.11.13
16:40
(41) проблема в том, что неясно в чем проблема
44 Midaw
 
13.11.13
11:27
изучил Dependency Walker. нашел библиотеки MFC. все подключилось и заработало. всем спасибо, все свободны.
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.