2009-03-03 9 views
2

プログラムで.lnkファイルを作成しようとしています。私はCを使うのが好きですが、C++はうまくいきます(そして、すべてのMSDNのものが入っています)。ワインリンカエラー:.lnkを作成しようとしています

関連するコードサンプルは次のとおりです。

#include <windows.h> 
#include <shobjidl.h> 
#include <shlguid.h> 

HRESULT CreateLink(LPCSTR lpszPathObj, LPCSTR lpszPathLink, LPCSTR lpszDesc) { 
    HRESULT hres; 
    IShellLink* psl; 

    /* Get a pointer to the IShellLink interface. */ 
    hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, 
          IID_IShellLink, (LPVOID*)&psl); 
    return hres; 
} 

私が使っ++ winegでcompleしようとしている:

wineg++ -mno-cygwin -o t t2.cpp 

をそして、私は次のエラーを取得しています:

 
t2-Tw9YPp.o: In function `CreateLink(char const*, char const*, char const*)': 
t2.cpp:(.text+0x34): undefined reference to `IID_IShellLinkA' 
/usr/bin/ld: t2-Tw9YPp.o: relocation R_386_GOTOFF against undefined hidden symbol `IID_IShellLinkA' can not be used when making a shared object 
/usr/bin/ld: final link failed: Bad value 
collect2: ld returned 1 exit status 
winegcc: i486-linux-gnu-g++ failed 

何か案は?

+0

あなたの質問はショートカットファイルを作成する方法ですが、あなたが示す問題はリンカエラーです。ショートカットを作成する方法を知っていますか?プログラムを作成するのに問題があるだけですか、リンカーの問題を解決するには、次に何をすべきか疑問に思っていますか? –

+0

I * think * MSDNのコード例をいくつか用意しています。 – singpolyma

答えて

2

ソリューションは、に含まれる部分を変更することがあるように思わ:

#define INITGUID 
#include <windows.h> 
#include <shobjidl.h> 
#include <shlguid.h> 
#include <initguid.h> 

すなわち、すべての前#define INITGUIDを追加し、私はこの作業の理由はわかりません#include <initguid.h>

が含まれます。

引用したものが解決された後に発生したエラーを修正するには、-lole32も追加する必要がありました。

コードがコンパイルされ、私が必要とするものを実現できるかどうかを確認します。

1

リンカーは、IID_IShellLinkAが定義されているかどうかわからないと訴えています。ヘッダーに宣言がありますが、おそらくライブラリがありません。私はそれがlibuuidで定義されていると思うので、あなたのリンクコマンドに-luuidを含めてください。リンカーはおそらくkernel32とuser32を含むいくつかのライブラリを自動的に含むように設定されていますが、uuidはそのリストにないかもしれません。

+0

-luuidを追加しても、エラーメッセージは変更されません。ライブラリを見つけられなかったことについてはエラーは発生しませんが、エラーは変更されません。 – singpolyma

+0

私はワインを持っていないので、どのライブラリが定義されているかは確かに言えません。あなたはUnixライブラリファイルにelfdumpが何を含んでいるかを見ることができます。ワインライブラリでもうまくいくかもしれないので、必要なファイルをlibフォルダから検索することができます。 –

+1

ワインをダウンロードしました。私はshell32.dll.soに文字列 "IID_IShellLinkA"を見つける。 –

関連する問題