gdi+ LNK1103エラーの解決方法を教えてください

このQ&Aのポイント
  • gdi+を使用してJPEG画像を保存しようとした際に、LNK1103エラーが発生します。
  • デバッグバージョンでのみエラーが発生し、リリースバージョンではエラーが出ません。
  • エラーメッセージによると、デバッグ情報が壊れているようですが、解決策を見つけることができません。
回答を見る
  • ベストアンサー

gdi+ LNK1103

Windows2000、VC++6.0 mfc こんにちは。 gdi+を使ってJPEG 画像を保存しようと思ったらリンクエラーになってしまいました。以下状況です。 Platform SDKをダウンロードし、INCLUDEおよびLIBのパスをオプション-ディレクトリタ-インクルードファイル、ライブラリファイルに追加して最上位に移動しました。gdiplus.dllをダウンロードし、exeと同じフォルダに置きました。 StdAfx.h  #pragma comment(lib, "GdiPlus.lib")  #include <gdiplus.h>  using namespace Gdiplus; CxxxApp.h private: ULONG_PTR m_gdiplusToken; CxxxApp.cpp   BOOL CHogeApp::InitInstance(){    Gdiplus::GdiplusStartupInput gdiplusStartupInput;    Gdiplus::GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL);    … } void CxxxApp::OnPicture() {  CLSID encoderClsid;  GetEncoderClsid(L"image/jpeg", &encoderClsid);  LONG lQuality = 80;  EncoderParameters EncoderParams;  EncoderParams.Parameter[0].Guid = EncoderQuality;//------☆  EncoderParams.Parameter[0].NumberOfValues = 1;  EncoderParams.Parameter[0].Type = EncoderParameterValueTypeLong;  EncoderParams.Parameter[0].Value = (VOID*) &lQuality;  EncoderParams.Count = 1; … } この状態でビルドすると、 GdiPlus.lib(imagingguds.obj) : fatal error LNK1103: デバッグ情報が壊れています; モジュールを再コンパイルしてください というメッセージが出ます。どうやら☆の行で出ているようなのですが、どうしていいのか分かりません。ちなみにこれはデバッグバージョンでのみ出現し、リリースバージョンでは何のエラーも出ません。 何か間違い、足りないものがあればご指摘ください。 お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • yonfa
  • ベストアンサー率52% (22/42)
回答No.2

SDKのシステム要求の開発ツール項目を見ると、VC6をサポートするSDKは2003年2月版までと書いてありました。 最新版SDKはコンパイルオプションが違うみたいなので無理かもしれませんねぇ。

ion_2005
質問者

お礼

わざわざ回答を寄せてくださったのに返事が遅れて申し訳ございません。 そうですか。できないのであれば仕方ありません。あきらめます。 ありがとうございました。

その他の回答 (1)

  • yonfa
  • ベストアンサー率52% (22/42)
回答No.1

プログラムに悪いところはないと思います。 VC6とPlatform SDKの相性が悪いのだと思います。 PlatformSDK のバージョンはいくつでしょうか?

ion_2005
質問者

補足

よく理解しないまま下記の場所のPSDK-x86.exeをダウンロードしてしまったのですが、やはり良くなかったでしょうか? http://www.microsoft.com/downloads/details.aspx?FamilyId=A55B6B43-E24F-4EA3-A93E-40C0EC4F68E5&displaylang=en

関連するQ&A

  • GDI+について

    Jpegファイルを保存したくて、 GDI+(gdiplus.dll)のことを知りました。 gdiplus.hをインクルードして、使ってみました。 GDI+は、、、.NETに似ている気がします。 これは、便利ですが、 安易にこれを使ってもいいのでしょうか? なんというか、 マネージドアプリケーションになるような気がするのですが。 なるのでしょうか?ならないのでしょうか? Visual Studio.NET WindowsXP よろしくお願いします。

  • error LNK2001について

    C++ の勉強中です。 error LNK2001問題がありました。問題点も分からないから、 分かった方に教えていただけないでしょうか? ソースも添付します。環境はVS2005 express edition まず、ヘッダファイルです。ファイル名は、myheader.h #ifndef __MYHEADER_H__ #define __MYHEADER_H__ #define includeshow(x) \ { \ s.show(x); \ } class Sample{ public: void show(char * parameter); }; extern Sample s; #endif //------------------------------------------------ 次に、Sample.cppです。 #include "myheader.h" #include <stdio.h> void Sample::show(char *parameter){ printf("in show func"); } //----------------------------------------------- 最後にTest.cppです。 #include "myheader.h" #include <stdio.h> int main(){ includeshow("ppppp"); } これで error LNK2001: 外部シンボル ""class Sample s" (?s@@3VSample@@A)" は未解決です。というエラーが出ています。 よろしくおねがいします。

  • C++ の LNK2001エラー

    「sample.obj : error LNK2001: 外部シンボル ""void * __cdecl SetupDiGetClassDevsW(struct _GUID *,wchar_t const *,struct HWND__ *,unsigned long)" (?SetupDiGetClassDevsW@@$$FYAPAXPAU_GUID@@PB_WPAUHWND__@@K@Z)" は未解決です。」というエラーメッセージが出ます。  ソース中に extern "C" { #include "hidsdi.h" #include <setupapi.h> } #pragma comment(lib, "setupapi.lib") #pragma comment(lib, "hid.lib")  の記述をしています。  Visual C++ 2005 Express Edition で [プロジェクト] -> [プロパティ] -> [構成プロパティ] -> [リンカ] -> [追加のライブラリ] のところにディレクトリ設定も行っています。  どのようにしたら解決できるのでしょうか。

  • 多重定義が起きている?--lnk2005エラー:VC++

    今つまずいている問題は、VC++2008環境下で、以下のような構造になっているプログラムにおいて、多重定義?されているのでコンパイルが通らないというものです。 ソースコードを載せることは大きすぎてできないので、問題となる部分の記述のみ抽出して書きます。 -------define.h---------- ・・・・(module.h内の関数に使われる型の定義など) --------------------------- -------module.h---------- #include "define.h" void mod_1(void){・・・} void mod_2(void){・・・} --------------------------- このように、2つのヘッダーファイルがあり、define.hをインクルードしてmodule.hを使うという構造です。 (一般的ではないようですが、module.h内にmod_1やmod_2の実体を書き込んでいます。) その中で、以下のようなcppソースファイルがあります。 -------Main.cpp---------- #include "module.h"   (他のMain.cpp内の関数の都合上、Main.cppでもmodule.hをインクルードしています。関係あるかもしれないと思い書きました。) int main(){ M(); N(); } ------------------------ -------M.cpp---------- #include "module.h" void M(void){ mod_1(); mod_2(); } ---------------------- -------N.cpp---------- #include "module.h" void N(void){ mod_1(); mod_2(); } ---------------------- とすると、コンパイルの結果は次のようになります。 1>N.obj : error LNK2005: "void __cdecl mod_1(void)" (?mod_1@@YAXXZ) は既に M.obj で定義されています。 1>N.obj : error LNK2005: "void __cdecl mod_2(void)" (?mod_2@@YAXXZ) は既に M.obj で定義されています。 多重定義や多重インクルードは起こしていないと思っていますが、M.cppとN.cpp内の定義が衝突する理由がわかりません。どなたか理由が思いつく方、教えていただけたら幸いです。お願いいたします!! ◆◆◆   ◆◆◆   ◆◆◆   ◆◆◆   ◆◆◆ ちなみに、たとえばMやNとまったく同じ「A.cpp」を作り、このように書いたとします。 -------A.cpp---------- #include "module.h" void A(void){ mod_1(); mod_2(); } ---------------------- そしてmain関数の中に、MやNと同様に『A();』を付け加えたとします。 すると、実行結果はこのようになります。 1>M.obj : error LNK2005: "void __cdecl mod_1(void)" (?mod_1@@YAXXZ) は既に A.obj で定義されています。 1>M.obj : error LNK2005: "void __cdecl mod_2(void)" (?mod_2@@YAXXZ) は既に A.obj で定義されています。 1>N.obj : error LNK2005: "void __cdecl mod_1(void)" (?mod_1@@YAXXZ) は既に A.obj で定義されています。 1>N.obj : error LNK2005: "void __cdecl mod_2(void)" (?mod_2@@YAXXZ) は既に A.obj で定義されています。 VC++はファイル名のアルファベット順にコンパイルするようですが、どちらにせよmain関数内で呼び出されていること以外何の関わりも無いはずのA、M、Nの中での出来事が、衝突する理由が、調べども思い当たりません。 お願いいたします。

  • LNK1120 エラーについて

    このエラーが出たら一体何が問題なんですか? このエラーが出た以降、Visual C++ 2008がずっと使えなくなってしまいました…。ちなみ、この時にビルドで出力されたのは SVCRTD.lib(crtexew.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。 ■■■\Debug\tr3.exe : fatal error LNK1120: 外部参照 1 が未解決です。 …でした。 あと、入力したものは普通に #include <stdio.h> void main(){ printf ("Hello World"); } です

  • GDI+で画像表示後に画面がちらつく

    GDI+を使いクライアント領域に画像を表示後に、ウィンドウサイズを変更すると変更中に画面が激しくちらつきます。本に書いてあったバックバッファを使った方法も試したのですが変わりませんでした。 どうすればちらつかないようにできますか? --- 実行環境 --- Microsoft Visual C++ 2010 Express WIN32 ユニコードビルド C++ #include <windows.h> #include <GdiPlus.h> #pragma comment(lib,"gdiplus.lib") LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); ATOM InitApp(HINSTANCE); BOOL InitInstance(HINSTANCE, int); TCHAR szClassName[] = TEXT("test"); Gdiplus::Bitmap *img1=NULL; Gdiplus::Bitmap *backbuf=NULL; int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst, LPSTR lpsCmdLine, int nCmdShow) { MSG msg; BOOL bRet; Gdiplus::GdiplusStartupInput gdisi; ULONG_PTR gditoken; if(Gdiplus::GdiplusStartup(&gditoken,&gdisi,NULL)!= Gdiplus::Ok) return 0; if (!InitApp(hCurInst)) return FALSE; if (!InitInstance(hCurInst, nCmdShow)) return FALSE; while ((bRet = GetMessage(&msg, NULL, 0, 0)) != 0) { if (bRet == -1) { break; } else { TranslateMessage(&msg); DispatchMessage(&msg); } } delete img1,backbuf; Gdiplus::GdiplusShutdown(gditoken); return (int)msg.wParam; } ATOM InitApp(HINSTANCE hInst) { WNDCLASSEX wc; wc.cbSize = sizeof(WNDCLASSEX); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInst; wc.hIcon = (HICON)LoadImage(NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED); wc.hCursor = (HCURSOR)LoadImage(NULL, MAKEINTRESOURCE(IDC_ARROW), IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED); wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName = (LPCTSTR)szClassName; wc.hIconSm = (HICON)LoadImage(NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED); return (RegisterClassEx(&wc)); } BOOL InitInstance(HINSTANCE hInst, int nCmdShow) { HWND hWnd; hWnd = CreateWindow(szClassName, TEXT("GDI+で画像表示"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInst, NULL); if (!hWnd) return FALSE; ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE; } LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { PAINTSTRUCT ps; HDC hdc; static int imgwidth; static int imgheight; switch (msg) { case WM_CREATE:{ img1=new Gdiplus::Bitmap(TEXT("test.jpg")); if(img1->GetLastStatus() != Gdiplus::Ok){ MessageBox(hWnd,TEXT("ファイルがありません"),NULL,MB_OK); } imgwidth=img1->GetWidth(); imgheight=img1->GetHeight(); backbuf=new Gdiplus::Bitmap(imgwidth,imgheight,PixelFormat32bppARGB); Gdiplus::Graphics g(backbuf); g.DrawImage(img1,0,0,imgwidth,imgheight); break;} case WM_PAINT:{ hdc=BeginPaint(hWnd,&ps); Gdiplus::Graphics g(hdc); g.DrawImage(backbuf,0,0,imgwidth,imgheight); EndPaint(hWnd,&ps); break;} case WM_DESTROY: PostQuitMessage(0); break; default: return (DefWindowProc(hWnd, msg, wp, lp)); } return 0; }

  • LNK2005

    Visual C++ Version5.0を使っています。 OSはWindows XPです。 translator.cpp parser.cpp scanner.h という三つのファイルをビルドしようとすると translator.obj : error LNK2005: "int error_flag" (?error_flag@@3HA) は すでに parser.obj で定義されています というエラーがそれぞれの変数ごとに20個出て、最後に ebug/COSC47101.exe : fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました link.exe の実行エラー と表示されます。それらの変数はすべて"scanner.h"で定義されており、 二つの.cppファイルがincludeしているのが原因だということは分かっています。 しかし、どうやって解決すればよいのでしょうか? 過去ログを参考にして二つの.cppファイルの中で #if !defined(HOGE_X) #define HOGE_X #endif //include files #include "scanner.h" とやっても全然駄目です。 どうか解決するまで手取り足取り教えてください。 お願いします。m(__)m

  • bcrypt.h コンパイルエラー

    #define BCRYPT_DH_PARAMETERS_MAGIC 0x4d504844 // DHPM typedef __struct_bcount(cbLength) struct _BCRYPT_DH_PARAMETER_HEADER { ULONG cbLength; ULONG dwMagic; ULONG cbKeyLength; } BCRYPT_DH_PARAMETER_HEADER; の部分で、 1>c:\program files (x86)\microsoft sdks\windows\v6.0\include\bcrypt.h(326) : error C2065: 'cbLength' : 定義されていない識別子です。 と出るのですが、解決方法はありますか? OS:Win7  VC++2005 を使っています。 サンプルコードをコンパイルしています。 SDKs は v6.0 と v7.1 をダウンロードしてあります。 コンパイラを新しくするのが簡単とは思いますが、、、 よろしくお願いいたします。

  • ダイアログのOKボタンを押してウィンドウを生成する方法は?

    ダイアログのOKボタンを押すとウィンドウが生成する方法を教えてください。 MFCでプログラミングしてメインウィンドウをダイアロボックスにしています //アプリケーション class CMyApp : public CWinApp { public: virtual BOOL InitInstance(); }; //メインダイアログ class CMyDlg : public CDialog { public: CMyDlg(CWnd *pParentWnd=NULL); protected: virtual void OnOK(); virtual void OnCancel(); }; #include <afxwin.h> #include <afxdlgs.h> #include <string.h> #include "dlg.h" #include "resource.h" CMyApp myApp; BOOL CMyApp::InitInstance(){ m_pMainWnd = new CMyDlg; m_pMainWnd ->ShowWindow(m_nCmdShow); m_pMainWnd ->UpdateWindow(); return TRUE; } CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/) { Create("MYDLG"); } としています。 ダイアログはできるのですが、ここからウィンドウを生成する方法を教えてください

  • VisualStudio2005を使っています。

    最近VisualStudioを買い、試しに #include <stdio.h> int main(void) { printf("Hello,World"); return 0; } と打ち込みましたが、 fatal error C1010: プリコンパイル ヘッダーを検索中に不明な EOF が見つかりました。'#include "stdafx.h"' をソースに追加しましたか? とのエラーメッセージが出て困っております。 この場合は具体的にどのようなことをすればよいのでしょうか?よろしくお願いします。

専門家に質問してみよう