سؤال

وأنا أحاول لإنشاء ملف .lnk برمجيا. وأود أن تفضل استخدام C، ولكن C ++ على ما يرام (وهذا ما هو كل الاشياء MSDN في).

ونموذج التعليمات البرمجية ذات الصلة هي:

#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 ++ باستخدام:

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

وأي أفكار؟

هل كانت مفيدة؟

المحلول

والحل يبدو أن تغيير القسم لتشمل:

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

وأي إضافة #define INITGUID قبل كل شيء، وتشمل #include <initguid.h>

وليس لدي أي فكرة لماذا يعمل هذا.

وكان لي أيضا أن أضيف -lole32 لإصلاح الخطأ الذي جاء بعد أن حل واحد المذكورة.

ورمز يجمع ... الآن لنرى ما اذا كان يمكن أن تجعل من فعل ما أحتاج.

نصائح أخرى

ورابط يشكو أنه لا يعرف حيث يتم تعريف IID_IShellLinkA. لديك إعلان في رأس، ولكن ربما كنت في عداد المفقودين مكتبة. اعتقد انه تم تعريفها في libuuid ، بحيث تشمل أن في قيادة ربط مع -luuid. وربما تكوين رابط لتشمل مجموعة معينة من المكتبات تلقائيا، بما في ذلك KERNEL32 وUSER32، ولكن UUID فقط قد لا تكون على تلك القائمة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top