Я хочу использовать API EmfToWmfBits. И сначала я попытаюсь создать класс Metafile, а затем вызвать этот API. Я думаю, проблема в том, как я создаю класс.
Metafile myMetafile(szArglist[1]);
Таким образом, я получаю объект myMetafile, но он ничего не содержит. Я имею в виду, что родное изображение в этом объекте имеет значение NULL, которое должно указывать на метафайл на моем диске. Поэтому позже, когда я вызываю API EmfToWmfBits, он дает мне ноль.
Я предполагаю, что проблема может заключаться в том, что класс Metafile должен принимать строку wchar. А имя файла на диске не wchar? Я пробовал так.
Metafile myMetafile(L"bird.emf");
А также это.
Metafile myMetafile(L"鸟.emf");
Я уверен, что файл emf находится в одном каталоге с exe. Но все они потерпели неудачу.
Это код, который я использовал.
#include <iostream>
#include <stdio.h>
#include <WINDOWS.H>
#include <shellapi.h>
#include <gdiplus.h>
#pragma comment(lib,"gdiplus.lib")
#pragma comment(lib, "shell32.lib")
using namespace Gdiplus;
int main(int argc, char **argv)
{
UINT size1 = 0;
int argcount;
LPWSTR* szArglist;
if (argc < 2) {
std::cout << "Please input a file name" << std::endl;
return 0;
}
szArglist = CommandLineToArgvW(GetCommandLineW(), &argcount);
Metafile myMetafile(szArglist[1]);
LocalFree(szArglist);
HENHMETAFILE hEmf = myMetafile.GetHENHMETAFILE();
size1 = Metafile::EmfToWmfBits(
hEmf,
0,
NULL,
MM_ANISOTROPIC,
EmfToWmfBitsFlagsEmbedEmf);
std::cout << size1 << std::endl;
}
Обычно этот API-интерфейс EmfToWmfBits должен возвращать длину преобразованного файла. Детали этого API здесь. https://docs.microsoft.com/en-us/windows/win32/api/gdiplusheaders/nf-gdiplusheaders-metafile-emftowmfbits Буду признателен, если кто-нибудь поможет мне здесь.
GetCurrentDirectory
, чтобы найти out или попробуйте указать полный абсолютный путь к файлу. - person Some programmer dude   schedule 09.09.2019