C ++ передача аргументов командной строки в dll - PullRequest
1 голос
/ 16 марта 2011

Среда: Windows XP SP3, Visual C ++ 2010 Express, шаблон DLL

Я пытаюсь передать аргументы командной строки в мою функцию DLL

Пример: "c: \ Development> rundll32, getpage.dll, GetPage http://www.google.ca"

Когда я передаю следующую строку "http://www.google.ca", я получаю случайные числа (при условии адреса адреса?)

#include "stdafx.h"

#include <string.h>

#include <string>

#include <stdlib.h>

#include <stdio.h>

#include <urlmon.h>

#include <tchar.h>

#include <fstream>

using namespace std;

extern "C" __declspec(dllexport) LPCWSTR __cdecl GetPage(LPCWSTR URL);

BOOL APIENTRY DllMain( HANDLE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved ){
return TRUE;
}

LPCWSTR GetPage(LPCWSTR URL){

LPCWSTR status;

HRESULT getpage_status = URLDownloadToFile ( NULL,URL, _TEXT("status.log"), 0, NULL );

/*** Do stuff is working if I pass a static string eg URL = "http://www.google.ca"; I need command line args sent  to the function instead***/

return status;

Ответы [ 2 ]

4 голосов
/ 16 марта 2011

Вы не можете использовать rundll32 для запуска любой функции DLL, вы можете использовать ее только для запуска функций, имеющих следующую подпись:

  void CALLBACK
  EntryPoint(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow);

См. MSDN для получения дополнительной информации.Либо измените GetPage, чтобы использовать эту сигнатуру функции, либо создайте новую функцию с этой сигнатурой, которая будет использоваться в качестве точки входа, и вызовите ее GetPage.

.
1 голос
/ 16 марта 2011

Я бы прочитал эту статью базы знаний Майкрософт . Первый параметр вашей функции - дескриптор окна. Вам нужно будет изменить прототип вашей функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...