Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winapi visualc&x2B+;GDI+;问题:GdiplusStartup始终返回2(无效参数)_Winapi_Visual C++_Gdi+ - Fatal编程技术网

Winapi visualc&x2B+;GDI+;问题:GdiplusStartup始终返回2(无效参数)

Winapi visualc&x2B+;GDI+;问题:GdiplusStartup始终返回2(无效参数),winapi,visual-c++,gdi+,Winapi,Visual C++,Gdi+,我试图测试一个简单的GDI+程序,但无法初始化它。GdiplusStartup返回2,表示“无效参数”。在调试模式下,我可以看到GDIPlusStartupInputStartInput已初始化(GdiplusVersion=1…等),因此这不是问题所在 #include <windows.h> #include "resource.h" #include <iostream> #include <string> #include <sstream>

我试图测试一个简单的GDI+程序,但无法初始化它。GdiplusStartup返回2,表示“无效参数”。在调试模式下,我可以看到GDIPlusStartupInputStartInput已初始化(GdiplusVersion=1…等),因此这不是问题所在

#include <windows.h>
#include "resource.h"
#include <iostream>
#include <string>
#include <sstream>
#include <gdiplus.h>

using namespace Gdiplus;
#pragma comment (lib,"Gdiplus.lib")

BOOL CALLBACK DialogProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) {
.... some code here ....
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
    GdiplusStartupInput startInput;
    ULONG_PTR* gdiToken = 0;

    Gdiplus::Status status = Gdiplus::GdiplusStartup(gdiToken, &startInput, NULL);
    return DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DialogProc);
}
#包括
#包括“resource.h”
#包括
#包括
#包括
#包括
使用名称空间Gdiplus;
#pragma注释(lib,“Gdiplus.lib”)
BOOL回调对话框proc(HWND-HWND,UINT消息,WPARAM-WPARAM,LPARAM-LPARAM){
……这里有一些代码。。。。
}
int WINAPI WinMain(HINSTANCE HINSTANCE、HINSTANCE HPPreInstance、LPSTR lpCmdLine、int nCmdShow){
GdiplusStartupInput;
ULONG_PTR*gdiToken=0;
Gdiplus::Status Status=Gdiplus::Gdiplus启动(gdiToken,&startInput,NULL);
返回对话框(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,DialogProc);
}

谢谢第一个论点是错误的。下面的描述是这样的:

指向接收令牌的ULONG_PTR的指针

但您正在传递一个空指针。更改代码如下:

GdiplusStartupInput startInput; // use default constructor to initialize struct
ULONG_PTR gdiToken;
Gdiplus::Status status = Gdiplus::GdiplusStartup(&gdiToken, &startInput, NULL);

第一个论点是错误的。下面的描述是这样的:

指向接收令牌的ULONG_PTR的指针

但您正在传递一个空指针。更改代码如下:

GdiplusStartupInput startInput; // use default constructor to initialize struct
ULONG_PTR gdiToken;
Gdiplus::Status status = Gdiplus::GdiplusStartup(&gdiToken, &startInput, NULL);

好吧,还有更多。再次阅读我答案中的代码。您需要将
gdiToken
声明为
ULONG\u PTR
,而不是问题代码中的
ULONG\u PTR*
。这是一个非常常见的错误,你应该确保你理解并认识到它,这样你就不会再犯了。当然,您确实需要初始化
startInput
,而您的代码不需要初始化。如果我没有错的话,根据MSDN,GdiplusStartupInput具有构造函数并将初始化它,默认情况下GdiplusVersion为1。好吧,还有更多。再次阅读我答案中的代码。您需要将
gdiToken
声明为
ULONG\u PTR
,而不是问题代码中的
ULONG\u PTR*
。这是一个非常常见的错误,你应该确保你理解并认识到它,这样你就不会再犯了。当然,您确实需要初始化
startInput
,而您的代码没有初始化。如果我没有错,根据MSDN,GdiplusStartupInput具有构造函数并将初始化它,默认情况下GdiplusVersion为1。