C ++将命令行参数传递给dll

时间:2011-03-16 18:44:03

标签: c++ string dll args

环境: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 个答案:

答案 0 :(得分:4)

你不能使用rundll32来运行任何DLL函数,你只能用它来运行具有以下签名的函数:

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

有关详细信息,请参阅MSDN。更改GetPage以使用此函数签名,或创建具有该签名的新函数以用作入口点并进行该调用GetPage

答案 1 :(得分:1)

我会看看这个Microsoft Knowledge Base article。函数的第一个参数是窗口句柄。你需要改变你的功能原型。