Znn3bq.jpeg
²é¿´: 953  |  »Ø¸´: 0

yalefield

½ð³æ (ÎÄ̳¾«Ó¢)

ÀϺºÒ»Ã¶

[½»Á÷] ¡¾×ªÌû¡¿WindowsϱàдQt²å¼þ

Ô­Ì⣺ʹÓÃQt±àдģ¿é»¯²å¼þʽӦÓóÌÐò
×÷Õߣº³ÌÐò¿ª·¢Ö®¼Ò
http://www.cngeng.info/qt%B1%E0%B3%CC/1986.html

¶¯Ì¬Á´½Ó¿â¼¼ÊõʹÈí¼þ¹¤³ÌʦÃÇÊÞѪ·ÐÌÚ£¬ËüʹµÃÓ¦ÓÃϵͳ£¨³ÌÐò£©¿ÉÒÔÒÔ¶þ½øÖÆÄ£¿éµÄÐÎʽÁé»îµØ×齨ÆðÀ´¡£±ÈÆðÔ´Âë¼¶±ðµÄÄ£¿é»¯£¬¶þ½øÖƼ¶±ðµÄÄ£¿é»® ·ÖʹµÃ¸÷Ä£¿é¸ü¼Ó¶ÀÁ¢£¬¸÷Ä£¿é¿ÉÒÔ·Ö±ð±àÒëºÍÁ´½Ó£¬Ä£¿éµÄÉý¼¶²»»áÒýÆðÆäËüÄ£¿éºÍÖ÷³ÌÐòµÄÖØÐ±àÒ룬Õâµã¶ÔÓÚ´óϵͳµÄ¹¹½¨À´Ëµ¸ü¼ÓʵÓá£ÁíÒ»·½Ã棬¶ÔÓÚÉÌҵĿµÄÃ÷ÏÔµÄÆóÒµ£¬¸÷Ä£¿é¿ÉÒÔ¶ÀÁ¢ÉèÖ÷ÃÎÊȨÏÞ£¬¿ª·¢³ÉÔ±Ö»ÄÜ·ÃÎÊ×Ô¼º¸ºÔðµÄÄ£¿é£¬ÆäËüÄ£¿éÊDz»ÄÜÒ²²»¸ø¿´µ½µÄ£¬ÕâÑù¼õÉÙÁËÕû¸öϵͳй©¼¼ÊõµÄ·çÏÕ¡£

Ò»¡¢¶¯Ì¬Á´½Ó¿â¼¼Êõ¸Å¿ö

¡¡¡¡¶¯Ì¬Á´½Ó¿â¼¼ÊõÓõúܶࡣÊÂʵÉÏ£¬Õû¸öWindows¾ÍÊÇÓÉÒ»¸ö¸ö¶¯Ì¬Á´½Ó¿â£¨DLL£©¹¹½¨ÆðÀ´µÄ£¬²»¹ÜÊÇϵͳÄںˣ¬»òÊÇϵͳµ÷ÓõÄAPI·â×°£¬»¹ ÊÇͨÓù¤¾ß£¨Èç¿ØÖÆÃæ°å¡¢ActiveX²å¼þµÈ£©£¬¶¼ÊÇÒ»¸ö¸ö¶¯Ì¬Á´½Ó¿âÎļþ¡£¶¯Ì¬Á´½Ó¿â²¢²»ÊÇ΢Èí¶ÀÓеļ¼Êõ£¬ËüÊÇÈí¼þ¹¤³Ì·¢Õ¹µ½Ò»¶¨½×¶ÎµÄ±ØÈ»²úÎï¡£ ÔÚÀàUnixϵͳÖУ¬ÕâÖÖ¶þ½øÖÆ¿ÉÖ´ÐÐÄ£¿é¼¼Êõ²»½Ð¶¯Ì¬Á´½Ó¿â£¬¶ø±»³ÆÎª¹²Ïí¶ÔÏó»ò¹²Ïí¿â£¬ºó׺ÃûÒ»°ãΪ.so£¨¼´Share ObjectµÄ¼òд£©¡£Îª¼ò±ã£¬ÏÂÎĽ«Í³³ÆÕâÖÖ¶¯Ì¬Á´½ÓµÄ¼¼ÊõΪDLL»ò¹²Ïí¿â¡£
¡¡¡¡Æäʵ£¬DLLÎļþ¸úÆÕͨµÄ¿ÉÖ´ÐÐÎļþ²î±ð²»´ó£¬¶¼ÊÇ¿ÉÖ´ÐÐÎļþÂï£¬×°ÔØµ½½ø³Ì¿Õ¼äºó£¬¶¼ÊÇһЩ»úÆ÷Ö¸Áº¯Êý´úÂ룩¡¢ÄÚ´æ·ÖÅ䣨±äÁ¿£©µÈ¡£
ÔÚ WindowsÖУ¬ÕâЩ¿ÉÖ´ÐÐÎļþ±»³Æ×÷PE/COFF¸ñʽÎļþ£¬ÔÚLinuxÔò³ÆÎªELFÎļþ¡£´ÓCPUµÄ½Ç¶È¿´À´£¬³ÌÐòÖеĸ÷¸öÒªËØ£¬²»¹ÜÊǺ¯Êý»¹ÊDZäÁ¿£¬ËüÃǶ¼ÊÇÒ»¸ö¸öµØÖ·£¬º¯ÊýÊÇÈë¿ÚµØÖ·£¬±äÁ¿ÊÇ·ÃÎʵØÖ·£»¶øC++µÄËùνÀà»ò¶ÔÏó£¬×îºóÒ²±»±àÒëÆ÷Ö«½â³ÉÁËÒ»¸ö¸ö±äÁ¿ºÍº¯Êý´úÂ루ÕâÀïÊÇÐÎÏóµÄ˵·¨£¬ ÑϽ÷¼¼Êõ½â˵£ºÇëËÑË÷C++¶ÔÏóÄ£ÐÍ£©¡£DLLµÄ×°ÔØ£¨Ö¸µ¼Èë½ø³Ì¿Õ¼ä£¬È»ºóÖ´ÐУ©·½Ê½±È¿ÉÖ´ÐÐÎļþµÄ×°ÔØÉÔ΢¸´ÔÓ£¬ÒòΪËü°ÑÄ£¿éÁ´½Ó¹ý³ÌÍÆ³Ùµ½ÁËÔËÐÐʱ¡£
ÔÚ¶¯Ì¬Á´½Ó¿âµÄ×°ÔØ¹ý³ÌÖУ¬Ê×ÒªÈÎÎñ¾ÍÊǽâ¾öµØÖ·Öض¨ÏòÎÊÌâ¡£ÎÒÃÇÖªµÀ£¬DLL×°ÔØµ½½ø³Ì¿Õ¼äµÄλÖ㨻ùÖ·£©ÊDz»È·¶¨µÄ£¨¶¯Ì¬×°ÔØÂ£¬¼´Ê¹ DLLÄÚ²¿Ê¹ Óõĺ¯Êýµ÷ÓúÍÈ«¾Ö±äÁ¿ÒýÓã¬ÔÚ×°ÔØÊ±¶¼ÒªÖØÐ¼ÆËãÆäµØÖ·¡£Windows²ÉÓûùÖ·ÖØ¶¨Ïò£¨Rebasing£©¼¼Êõ½â¾öÕâÒ»ÎÊÌ⣬¶ø Linux²ÉÓõØÖ·Î޹شúÂ루PIC£¬Í¨¹ýGOTºÍPLT±íʵÏÖ£©¼¼Êõ¡£ÕâÁ½ÖÖ¼¼Êõ¸÷ÓÐÓÅȱµã¡£

¶þ¡¢QtÖеĶ¯Ì¬Á´½Ó¿â±à³Ì
¡¡¡¡Ê¹ÓÃC++ÃæÏò¶ÔÏóµÄÀà±àдDLLÊÇҪעÒâºÜ¶àϸ½ÚµÄ£¬Ö÷ÒªÊǶþ½øÖÆ£¨ABI£©¼æÈÝÎÊÌâ¡£COMÊÇÒ»¸öºÜ³É¹¦µÄÀý×Ó£¬Ö»Òª·ûºÏCOMµÄ¹æ·¶£¬ÎÒÃǾÍÄܱàд³öºÜºÃµÄDLLÀ´£¬È»¶ø£¬COMÊÇ΢Èí˽ÉúµÄ£¬ÒªÏë¿çƽ̨£¬ÎÒÃÇ»¹µÃÁíÕÒËü·¡£
¡¡¡¡QtµÄ¿çÆ½Ì¨ÌØÐÔͬÑùÁîÈË£¨ÖÁÉÙÊÇÎÒ£©ÊÞѪ·ÐÌÚ¡£Èç¹ûÄãÈÏΪQT½ö½öÊÇÒ»¸ö¿çƽ̨½çÃæ¿â£¬ÄǾÍС¿´ËüÁË¡£ÎÒҪ˵µÄÊÇ£¬Ëü²»µ«ÊÇÒ»¸öͨÓÃµÄ¿çÆ½Ì¨µÄ¡¢ÃæÏò¶ÔÏóµÄÓ¦ÓóÌÐò½Ó¿Ú¿â£¨°üÀ¨GUI¡¢Êý¾Ý¿â¡¢ÍøÂç¡¢¶àÏ̡߳¢XML¡¢Êý¾ÝÈÝÆ÷ºÍËã·¨µÈ£¬³£Óõı༭×ÊÔ´¶¼Óзâ×°£¬¾ÍÊÇ˵£¬ÕâЩ¶¼¿ÉÒÔ¿çÆ½Ì¨£¬¶ø²»½ö½öÊǽçÃæ£©£¬¸üÊÇÒ»ÖÖC++ÓïÑÔµÄÀ©Õ¹£¬Ò»ÖÖ±à³Ìƽ̨ºÍÓ¦ÓóÌÐò¿ò¼Ü£º

    ÐźźͲ۵ĻúÖÆ¼ò»¯Á˶ÔÏóÖ®¼äµÄͨÐÅ£¬±ÈMFCµÄÏûÏ¢Ó³ÉäÖ±¹Û¶àÁË£»
    ½çÃæµÄ²¼¾Ö¹ÜÀí»úÖÆÊ¹¿ª·¢ÈËÔ±¿ÉÒÔºÜÇáËɵرà³öÓÅÑŵĴ°Ì壻
    ½çÃæÓïÑÔ·­Òë»úÖÆÒ²ºÜ·½±ãʵÓã»
    QObjectÈÝÆ÷¹ÜÀí¿ÉÒÔ¿´µ½QtÔÚÄÚ´æ¹ÜÀí·½ÃæµÄŬÁ¦£»
    À©Õ¹µÄ foreach Ñ­»·½á¹¹Ò²ÏòÏÖ´úÓïÑÔ¿¿Â£¡­¡­

¡¡¡¡QtµÄ¿çÆ½Ì¨ÌØÐԺܺ㬶ÔÓÚ±¾ÎĵÄÖ÷Ì⣭£­£­£­¶¯Ì¬Á´½Ó¿âµÄÖ§³ÖÒ²ºÜºÃ¡£
¡¡¡¡QT¶Ô¸÷ÖÖÆ½Ì¨µÄ¶¯Ì¬Á´½Ó¿â±à³Ì¼¼Êõ¶¼Óаü×°£¬QT°ÑÕâÖÖ¼¼ÊõͳһÃüÃûΪ¹²Ïí¿â £¨Shared Libraries£©¡£Í¨¹ýʹÓÃQt°ü×°¹ýµÄÀàºÍºê£¬¿ÉÒÔ±àд¿çƽ̨µÄ¹²Ïí¿âºÍ²å¼þ--µ±È»£¬ÕâÖ»ÊÇÔ´´úÂë¼¶±ðµÄ¿çƽ̨£¬Äã²»ÒªÖ¸ÍûÓÃMSVC±àÒë³öÀ´µÄ DLL£¬Äܼ¯³Éµ½ARMƽ̨µÄLinux³ÌÐòÉÏÃæ£­£­£­£­ÕâÊÇÒ»¸öºÜÃÀºÜÃÀµÄÀíÏëŶ¡£

QTʹÓÃÒÔÏÂÁ½¸öºêÀ´ÊµÏÖ·ûºÅ£¨º¯Êý»òÈ«¾Ö±äÁ¿/¶ÔÏ󣩵ĵ¼³öºÍµ¼È루¿çƽ̨²»ÄÜÓÃdefÎļþÁË£©£º
CODE:
Q_DECL_EXPORT   // ±ØÐëÌí¼Óµ½·ûºÅÉùÃ÷ÖУ¨¹²Ïí¿âÏîÄ¿£©   
Q_DECL_IMPORT   // ±ØÐëÌí¼Óµ½·ûºÅÉùÃ÷ÖУ¨Ê¹Óù²Ïí¿âµÄ¿Í»§ÏîÄ¿£©

¡¡¡¡QTʹÓà QLibrary ÀàʵÏÖ¹²Ïí¿âµÄ¶¯Ì¬¼ÓÔØ£¬¼´ÔÚÔËÐÐʱ¾ö¶¨¼ÓÔØÄǸöDLL³ÌÐò£¬²å¼þ»úÖÆÊ¹Óá£

Èý¡¢QT¹²Ïí¿âºÍ²å¼þ·¶Àý
¡¡¡¡±¾½Úͨ¹ýÀý×Ó£¬ÊµÏÖÒ»¸ö¹²Ïí¿âºÍÒ»¸ö²å¼þ¡£ÔÚWindowsƽ̨ÉÏ¿ª·¢£¬Ê¹ÓÃVS2005±àÒ룬QT¿â°æ±¾Îª4.6.2¡£
±¾ÀýÁ˽«±àдÒÔÏÂÈýÀàÏîÄ¿£º
    Bil ÏîÄ¿£º¹²Ïí¿âÏîÄ¿£¬Êä³öBil.dllºÍBil.lib£¬»ù´¡½Ó¿ÚÀà¿â£¬¶¨ÒåÒ»¸ö¹«¹²µÄ½Ó¿ÚIAnimal£¨³éÏóÀࣩ£¬¹©¿Í»§ÏîÄ¿ºÍ²å¼þÏîĿʹÓã»
    Plugin ÀàÏîÄ¿£º²å¼þÀàÏîÄ¿£¬ÏÖ±àдBilDogºÍBilPandaÁ½²å¼þÏîÄ¿£¬ÊµÏÖIAnimalµÄ¹¦ÄÜ£¬¹©¿Í»§ÏîÄ¿¼ÓÔØºÍ²âÊÔ¡£Á½ÏîÄ¿Êä³öBilDog.dllºÍBilPanda.dll£»
    Test ÏîÄ¿£º¿Í»§Ó¦ÓóÌÐòÏîÄ¿£¬Êä³öTest.exe£¬½çÃæÖпÉÒÔÑ¡ÔñÒª¼ÓÔØµÄAnimal²å¼þ£¬È»ºóµ÷ÓÃAnimalµÄ¹¦Äܺ¯Êý£¬Íê³É²âÊÔ£»


1. ±àд¹²Ïí¿â--Bil ÏîÄ¿µÄʵÏÖ
¡¡¡¡¸ÃÏîÄ¿¶¨ÒåÒ»¸ö³éÏóµÄ IAnimal Àà×÷Ϊµ¼³ö½Ó¿Ú£¬¹©¿Í»§ÏîÄ¿ºÍ²å¼þÏîĿʹÓá£ÏîÄ¿ÀàÐÍΪ¹²Ïí¿â£¬½«Éú³ÉBil.libºÍBil.dllÁ½¸öÎļþ£¬Bil.lib¹©PluginÏîÄ¿ºÍTest ÏîÄ¿ÒýÓ㬶øBil.dll½«¸øTest.exeÔËÐÐʱ¶¯Ì¬¼ÓÔØ¡£
н¨Ò»¸öÍ·ÎļþBil.h£¬ÊäÈëÈçÏ´úÂ룺
CODE:
#ifndef BIL_H #define BIL_H #include // ¶¨Òå BIL_SHARE£¬Ê¹ÓÃÕß¿ÉÒÔ²»ÓÃÔÙ´¦Àí·ûºÅµÄµ¼ÈëºÍµ¼³öϸ½Ú #ifdef BIL_LIB # define BIL_SHARE Q_DECL_EXPORT #else # define BIL_SHARE Q_DECL_IMPORT #endif #endif // BIL_H

¡¡¡¡ÄãÏÖÔÚ¿ÉÄܲ»ÖªµÀBIL_SHAREºêÓкÎÓô¦¡£Ã»¹ØÏµ£¬Çë¼ÌÐø¿´ÏÂÃæµÄIAnimal½Ó¿Ú¶¨Òå´úÂ룺
CODE:
#ifndef IANIMAL_H   
#define IANIMAL_H   
#include "Bil.h"   
class  BIL_SHARE IAnimal   
{   
public :   
    IAnimal();   
    virtual  ~IAnimal();   
public :   
    virtual  void  Eat() = 0;   
    virtual  void  Run() = 0;   
    virtual  void  Sleep() = 0;   
};      
#endif // IANIMAL_H   

¡¡¡¡ÏÖÔÚÖªµÀBIL_SHAREºêµÄÃîÓÃÁ˰ɡ£BIL_SHAREºê»á¸ù¾ÝÏîÄ¿±àÒëÑ¡ÏîBIL_LIBÓÐûÓж¨Ò壬×Ô¶¯ÉùÃ÷IAnimalÊǵ¼³öÀ࣬»¹Êǵ¼ÈëÀà¡£ËùÒÔ£¬Ê¹ÓÃBIL_SHAREºê£¬ÎÒÃÇÖ»ÐèÒªÏòIAnimal²å¼þµÄ¿ª·¢ÕßÌṩͬһ·ÝIAnimal¶¨ÒåÎļþ£¨IAnimal.h£©¼´¿É¡£ µ±È»£¬ÎÒÃǵÃÏÈÔÚBilÏîÄ¿µÄ±àÒëÑ¡ÏîÖж¨ÒåBIL_LIBºê£¬Ê¹µÃÔÚBilÏîÄ¿ÄÚ£¬BIL_SHARE¾ÍÊǵ¼³ö·ûºÅµÄÉùÃ÷¡£²å¼þÏîÄ¿¾Í²»Òª¶¨ÒåBIL_LIBÁË£¬ÒòΪÔÚAnimal²å¼þÏîÄ¿ÖУ¬IAnimalÊǵ¼Èë·ûºÅ¡£
¡¡¡¡±àÒëÑ¡ÏîÈçºÎ¶¨Òåºê£¿
    Èç¹ûʹÓÃVisual Studio¹¤³ÌÎļþ£¬ÒÀ´ÎÕ¹¿ª£ºÏîÄ¿ÊôÐÔ->ÅäÖÃÊôÐÔ->C/C++->Ô¤´¦ÀíÆ÷£¬ÔÚÔ¤´¦ÀíÆ÷¶¨ÒåÖÐÌí¼ÓºêBIL_LIB¼´¿É£»
    Èç¹ûÊÇQT¹¤³ÌÎļþ£¬ÇëÔÚQT¹¤³ÌÎļþBil.proÖмÓÈëÈç϶¨Ò壺 DEFINES += BIL_LIB

¡¡¡¡ÔÚIAnimal½Ó¿ÚÖУ¬ÎÒÃǶ¨ÒåÁËÈý¸ö´¿Ð麯ÊýEat()¡¢Run()ºÍSleep()£¬±íʾ³Ô¡¢ÅܺÍ˯Ãߵ͝×÷£¬ÕâÊdzéÏóµÄ£¬ÒòΪ²»Í¬µÄ¶¯ÎïÓÐ ²»Í¬µÄ³ÔÏàºÍ˯Ãß×Ë̬£¬¶øÊÀ¼äµÄ¶¯ÎïºÎֹǧǧÍò--ÎÞËùν£¬ÈÃÕâЩ¾ßÌ嶯ÎïµÄ²»Í¬±íÏÖ½»¸øIAnimal²å¼þµÄ±àдÕß·¢»Ó°É--Õâ¾ÍÊǽӿڵÄ÷ÈÁ¦£¬¼ÓÉϲå¼þµÄ˼Ï룬Õû¸öÓ¦ÓóÌÐò¾Í±ä³É¿ª·ÅµÄ£¬¿ÉÀ©Õ¹µÄÁË£¡
¼ÌÐø±àдIAnimalÀàµÄʵÏÖÎļþIAnimal.cpp£º
CODE:
#include "IAnimal.h"
IAnimal::IAnimal()
{ }
IAnimal::~IAnimal()
{ }

¡¡¡¡ËäȻֻʵÏÖÁ˹¹ÔìºÍÎö¹¹º¯Êý£¬²¢ÇÒʲô¹¤×÷Ò²²»×ö£¬µ«ÕâÊDZØÒªµÄ£¬ÎÒÃÇÔÝʱ²»ÒªÊ¹ÓÃÄÚÁªµÄ¹¹ÔìºÍÎö¹¹º¯Êý£¬·ñÔòÔÚ²å¼þÏîĿʵÏÖIAnimalʱ¿ÉÄÜ»á³öÏÖÁ´½Ó´íÎó¡£
¡¡¡¡¿ªÊ¼±àÒ룬Éú³ÉÕû¸öBilÏîÄ¿¡£×îÖյõ½Á½¸öÊä³öÎļþ£ºBil.lib ºÍ Bil.dll¡£
¡¡¡¡ÏÂÃæµÄ²å¼þÀàÏîÄ¿ºÍ¿Í»§ÏîÄ¿¾ÍÊÇÒÀÀµÕâЩÎļþʵÏֵģ¬Ò²ÐíÄã¸üÔ¸Òâ°ÑBil¿´×÷ÊÇÒ»¸öͨÓõÄDLLÀà¿â£¬¾ÍÏñQT»òMFCÒ»Ñù--ÊÂʵÉÏÒ²ÊÇÈç´Ë£¬Bil¾ÍÊÇÕâÑùÒ»¸ö¶¯Ì¬µÄ¹²ÏíÀà¿â¡£

2. ±àдAnimal²å¼þ--BilDogºÍBilPandaÏîÄ¿µÄʵÏÖ
¡¡¡¡ÏÖÔÚ£¬ÈÃÎÒÃÇÀ´ÊµÏÖÁ½¸öС²å¼þ¡£
¡¡¡¡BilDog²å¼þºÜ¼òµ¥£¬Ö»Êǻ㱨ÏÂ"ÎÒÊÇDog£¬ÎÒÕýÔڿйÇÍ·"£»
¡¡¡¡BilPandaÒ²ÊÇÈç´Ë
¡¡¡¡ÕâÀï½ö½öÊDzâÊÔ¶øÒÑ£¬ÊµÏÖµÄÏîÄ¿ÖУ¬Äã¿ÉÒÔ¾¡ÇéµÄ·¢»Ó--û´í£¬ÊÇÔÚ×ñÑ­IAnimal½Ó¿ÚµÄǰÌáÏ¡£
¡¡¡¡´´½¨BilDogÏîÄ¿£¬°ÑBilÏîÄ¿Êä³öµÄBil.h¡¢IAnimal.hºÍBil.lib¼ÓÈëµ½¹¤³Ì¡£
´´½¨DogÀàµÄÍ·ÎļþDog.h£º
CODE:
#ifndef CLASS_DOG_H   
#define CLASS_DOG_H   
#include "IAnimal.h"   
class  Dog : public  IAnimal   
{   
public :   
    Dog(void );   
    virtual  ~Dog(void );   
public :   
    virtual  void  Eat();   
    virtual  void  Run();   
    virtual  void  Sleep();   
};   
#endif // CLASS_DOG_H   

´´½¨DogÀàµÄʵÏÖÎļþDog.cpp£º
CODE:
#include    
#include "Dog.h"   
Dog::Dog(void )   {   }   
Dog::~Dog(void )   {   }   
void  Dog::Eat()   
{   
    QMessageBox::information(NULL, "Hello" , "Dog eating ..." );   
}   
void  Dog::Run()   
{   
    QMessageBox::information(NULL, "Hello" , "Dog running ..." );   
}   
void  Dog::Sleep()   
{   
    QMessageBox::information(NULL, "Hello" , "Dog sleeping ..." );   
}   

¡¡¡¡µ÷ÓÃQTµÄQMessageBox::information()º¯Êýµ¯³öÒ»¸öÐÅÏ¢Ìáʾ¿ò¡£
¡¡¡¡»¹ÓÐÒ»¸ö·Ç³£ÖØÒªµÄ¹¤×÷£¬ÎÒÃǵÃÌṩһ¸öÄܹ»´´½¨£¨ÊÍ·Å£©Animal¾ßÌå¶ÔÏó£¨ÕâÀïÊÇDog£©µÄ½Ó¿Ú£¬²¢ÇÒ°ÑÕâЩº¯Êýµ¼³ö£¬ÈÃÖ÷³ÌÐò£¨Test.exe£©Äܹ»½âÎöÕâ¸ö½Ó¿Úº¯Êý£¬¶¯Ì¬´´½¨Animal¶ÔÏ󣬲¢·ÃÎÊÆä¹¦ÄÜ¡£
н¨BilDog.hÎļþ£¬ÊäÈëÏÂÃæµÄ´úÂ룺
CODE:
#ifndef BILDOG_H
#define BILDOG_H
#include "Dog.h" // extern "C" Éú³ÉµÄµ¼³ö·ûºÅûÓÐÈκÎÐÞÊΣ¬·½±ãÖ÷³ÌÐòÕÒµ½Ëü extern "C" {
Q_DECL_EXPORT IAnimal * CreateAnimal();
Q_DECL_EXPORT void ReleaseAnimal(IAnimal * animal); }
#endif // BILDOG_H

ÕâÁ½¸öº¯ÊýµÄ¹¤×÷ºÜ¼òµ¥£¬Ö±½Ó´´½¨ºÍÊͷŶÔÏó¼´¿É¡£  
ÏÂÃæÊÇBilDog.cppµÄ´úÂ룺
CODE:
#include "bildog.h"
IAnimal * CreateAnimal() { return new Dog(); }
void ReleaseAnimal(IAnimal * animal) { delete animal; }

¡¡¡¡ÖÁ´Ë£¬Ò»¸öAnimal²å¼þ×ÜËãÍê³ÉÁË¡£±àÒ룬Éú³ÉBilDogÏîÄ¿£¬Êä³öBilDog.dll²å¼þÎļþ£¬ÒÔ¹©Ö÷³ÌÐòTest.exe¶¯Ì¬µ÷Óá£
¡¡¡¡BilPandaÏîÄ¿ºÍBilDogÏîÄ¿ÀàËÆ£¬ÔÚÕâÀï¾Í²»°Ñ´úÂëÌù³öÀ´ÁË¡£ÒԺ󿪷¢Animal²å¼þ£¨¼´Ê¹ÊǵÚÈý·½£©µÄ¹ý³Ì¶¼ÊÇÈç´Ë¡£
¡¡¡¡ÎÒÃDz»´òËãÊä³ö¸ÃÏîÄ¿µÄ.libÎļþºÍÄÇЩͷÎļþ£¬ÒòΪÎÒÃÇ´òËãÈÃÖ÷³ÌÐòÔÚÔËÐÐʱ¿Ì¸ù¾ÝÐèÒª×°ÔØdll²å¼þºÍµ÷Óòå¼þµÄ¹¦ÄÜ£¬¶ø²»ÊÇÈÃÖ÷³ÌÐòÏîÄ¿ÔÚ±àÒëʱ¾ÍÖ¸¶¨¾ßÌåµÄ²å¼þ¡£

3. ±àд¿Í»§³ÌÐò--TestÏîÄ¿µÄʵÏÖ

¡¡¡¡TestÏîÄ¿ÊÇÒ»¸ö²âÊÔ³ÌÐòÏîÄ¿£¬µ«ËüµÄ½ÇÉ«ÊÇÖ÷³ÌÐò£¬ÊÇÄÜʹÓÃAnimal²å¼þµÄ¿Í»§³ÌÐò¡£ Õâ¸öÏîÄ¿Óõ½ÁËBil¹²Ïí¿â£¬ËùÒÔµÃÏȰÑBilÏîÄ¿µÄ¼¸¸öÊä³öÎļþµ¼Èëµ½TestÏîÄ¿¡£
¡¡¡¡ÎÒÃǼÙÉèTestÖ÷³ÌÐòÊÇÒ»¸ö¶Ô»°¿ò£¬ÉÏÃæÓÐÒ»¸ö±à¼­¿òºÍÒ»¸ö"¼ÓÔØ²¢µ÷ÓÃ"°´Å¥£¬ÖÕ¶ËÓû§Ôڱ༭¿òÖÐÊäÈëAnimal²å¼þµÄÎļþÃû£¨±ÈÈç BilDog£¬ºó׺Ãû¿ÉÊ¡ÂÔ£¬Qt»á¸ù¾Ýƽ̨ÅжϸòéÕÒ.dll»¹ÊÇ.so£©£¬µã»÷"¼ÓÔØ²¢µ÷ÓÃ"½øÐй²Ïí¿âµÄ¼ÓÔØ£¬²¢µ÷Óö¯Ì¬´´½¨µÄIAnimal ¶ÔÏó µÄEat()º¯Êý£¨µ±È»Äã¿ÉÒÔµ÷ÓÃRun()º¯Êý»òSleep()£¬ÕâÀï½ö½öÊÇÒ»¸öʾÀý£©¡£
ÏÂÃæµÄº¯Êý½«±»"¼ÓÔØ²¢µ÷ÓÃ"°´Å¥µÄ´¥·¢Ê¼þµ÷Óãº
CODE:
#include    
#include    
#include       
// ...      
// strPluginNameΪ²å¼þµÄÃû³Æ£¬¿ÉÊ¡ÂÔºó׺   
void  MainDlg::LoadAndAction(QString strPluginName)   
{   
    // ¼ÓÔØ²å¼þdll   
    QLibrary lib(strPluginName);   
    if  (lib.load())   
    {   
        // ¶¨Òå²å¼þÖеÄÁ½¸öµ¼³öº¯ÊýµÄÔ­ÐÍ   
        typedef  IAnimal* (*CreateAnimalFunction)();   
        typedef  void  (*ReleaseAnimalFunction)(IAnimal* animal);   
           // ½âÎöµ¼³öº¯Êý   
        CreateAnimalFunction createAnimal =   
                (CreateAnimalFunction) lib.resolve("CreateAnimal" );   
        ReleaseAnimalFunction releaseAnimal =   
                (ReleaseAnimalFunction) lib.resolve("ReleaseAnimal" );   
           if  (createAnimal && releaseAnimal)   
        {   
            // ´´½¨Animal¶ÔÏó   
            IAnimal * animal = createAnimal();   
            if  (animal)   
            {   
                // ʹÓòå¼þ¹¦ÄÜ   
                animal->Eat();   
                animal->Sleep();   
                // ²å¼þʹÓÃÍê±Ï£¬É¾³ý¶ÔÏó   
                releaseAnimal(animal);   
            }   
        }   
        // Ð¶ÔØ²å¼þ   
        lib.unload();   
    }   
}   

¡¡¡¡Éú³ÉTestÏîÄ¿£¬Êä³ö Test.exe¡£
¡¡¡¡ÎÒÃǰÑTest.exe¡¢Bil.dll¡¢BilDog.dll¡¢BilPanda.dll·ÅÔÚͬһĿ ¼£¬Ë«»÷ÔËÐÐTest.exe£¬¸Ï¿ìÊÔÏÂЧ¹û°É£¡
¡¡¡¡×¢ÒâBilDog.dll»òBilPanda.dllÒÀÀµÓÚ»ù´¡½Ó¿Ú¿âBil.dll£¬Èç¹ûϵͳÕÒ²»µ½ Bil.dll£¬½«²»ÄܼÓÔØBilDog.dll»òBilPanda.dll£¬ËùÒÔÇë°ÑËüÃÇ·ÅÔÚͬһĿ¼¡£

ËÄ¡¢Ò»Ð©Òź¶
¡¡¡¡DLLµÄÔ¸ÍûÊÇÃÀºÃµÄ£¬Ö»Òª½Ó¿ÚÒ»Ö£¬Óû§¿ÉÒÔÈÎÒâ¸ü»»Ä£¿é¡£µ«Èç¹û²»×¢Òâϸ½Ú£¬ºÜÈÝÒ×ÏÝÈëËüµÄÄà̶ÖУ¬Õâ¾ÍÊÇ´«ËµÖеÄDLL Hell£¨DLLµØÓü£©£¡

ÒýÆðDLLµØÓüÎÊÌâµÄÖ÷ÒªÔ­ÒòÓÐÒÔϼ¸µã£º

1. °æ±¾¿ØÖƲ»ºÃ£¨Ö÷ÒªÊǽӿڵİ汾£©
¡¡    DLLÊǹ²ÏíµÄ£¬Èç¹ûij³ÌÐò¸üÐÂÁËÒ»¸ö¹²ÏíµÄDLL£¬ÆäËüͬÑùÒÀÀµÓÚ¸ÃDLLµÄ³ÌÐò¾Í¿ÉÄܲ»ÄÜÕý³£¹¤×÷ÁË£¡

2. ¶þÖÆ¼æÈÝÎÊÌ⣨ABI£©
¡¡    ¼´Ê¹Í¬Ò»Æ½Ì¨£¬²»Í¬±àÒëÆ÷£¨ÉõÖÁͬһ±àÒëÆ÷µÄ²»Í¬°æ±¾£©±à³öÀ´µÄ¹²Ïí¿âºÍ³ÌÐòÒ²¿ÉÄܲ»ÄÜЭͬ¹¤×÷¡£
¡¡    ¶þÖÆ¼æÈÝÎÊÌâ¶ÔÓÚC++À´ËµÓÈÆäÑÏÖØ¡£C++µÄ±ê×¼ÊÇÔ´´úÂë¼¶±ðµÄ£¬±ê×¼Öв¢Ã»ÓжÔÈçºÎʵÏÖC++×÷³öͳһµÄ¹æ¶¨£¬ËùÒÔ²»Í¬µÄ±àÒëÆ÷£¬¶Ô±ê×¼ C++²ÉÓò» ͬµÄʵÏÖ·½Ê½¡£ÕâЩ²îÒìÖ÷ÒªÓУº
    ¶ÔÏóÔÚÄÚ´æÖеķÖÅ䣨C++£©
    ¹¹ÔìºÍÎö¹¹º¯ÊýµÄʵÏÖ£¨C++£©
    ÖØÔØºÍÄ£°åµÄʵÏÖ£¨C++£©
    Ð麯Êý±í½á¹¹£¨C++£©
    ¶àÖØ¼Ì³ÐºÍÐé»ùÀàµÄʵÏÖ£¨C++£©
    º¯Êýµ÷ÓÃÔ¼¶¨£¨C£©
    ·ûºÅÐÞÊΣ¨C/C++£©

µÈ¡£
´ËÍ⣬²»Í¬µÄÔËÐÐʱ¿â£¨CRT¡¢STLµÈ±ê×¼¿â£©Ò²»áÒýÆðABI¼æÈÝ ÎÊÌâ¡£¿ÉÒÔ˵£¬Èç¹ûÄãÔÚ±àд»ùÓÚÀàµÄ¹²Ïí¿â£¬Èç¹û½Ó¿Ú£¨Ö¸µ¼³öÀࣩÉÔÓиı䣬еÄDLLÓëÔ­³ÌÐò¾Í¿ÉÄܲ»Ð­Í¬¹¤×÷ÁË¡£
¡¡¡¡¹ØÓÚ¶þ½øÖƼæÈÝÎÊÌ⣬´ó¼Ò¿ÉÒԲο¼KDE¹ÙÍøÉϵÄһƪÎÄÕ¡¶Policies/Binary Compatibility Issues With C++ ¡·
¡¡¡¡²»¹ýÕâЩ¶¼²»ÊÇ´óÎÊÌ⣬±Ï¾¹ÎÒÃDz»ÊDZàдÏñQtÒ»ÑùµÄͨÓÿ⡣ÎÒÃÇÒýÈëDLL»®·ÖÓ¦ÓóÌÐòµÄÄ£¿é£¬Ä¿µÄÊǼõСϵͳ¿ª·¢ºÍºóÆÚÉý¼¶Î¬»¤µÄÄѶȣ¬Í¬Ê±·½ ±ãÏîÄ¿µÄ¹ÜÀí¡£Èç¹ûÓû§Ïë×Ô¼º±àд²å¼þÄ£¿é£¬¾ÍµÃʹÓÃÎÒÃÇÖ¸¶¨µÄ±àÒëÆ½Ì¨ºÍÀà½Ó¿Ú¡£ËùÒÔÎÒÃÇÈÔÄÜ´ÓDLL¼¼ÊõÖеõ½ºÜ´óµÄʵ»Ý¡£
»Ø¸´´ËÂ¥

» ²ÂÄãϲ»¶

ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

ÖÇÄÜ»úÆ÷ÈË

Robot (super robot)

ÎÒÃǶ¼°®Ð¡Ä¾³æ

Ïà¹Ø°æ¿éÌø×ª ÎÒÒª¶©ÔÄÂ¥Ö÷ yalefield µÄÖ÷Ìâ¸üÐÂ
×î¾ßÈËÆøÈÈÌûÍÆ¼ö [²é¿´È«²¿] ×÷Õß »Ø/¿´ ×îºó·¢±í
[¿¼ÑÐ] ²ÄÁϹ¤³Ì085601£¬270Çóµ÷¼Á +38 @ASDF1234 2026-04-08 41/2050 2026-04-13 12:53 by ÕÅzhihao
[¿¼ÑÐ] 310Çóµ÷¼Á +13 666ÕæºÃ 2026-04-11 15/750 2026-04-13 12:16 by À¶ÔÆË¼Óê
[¿¼ÑÐ] 277Çóµ÷¼Á +23 Äß½¨Éè 2026-04-06 23/1150 2026-04-13 00:40 by Íõͯ×ÓÁú
[¿¼ÑÐ] 322Çóµ÷¼Á£¬08¹¤¿Æ +4 ½ñÌìÊǸöСºÅ 2026-04-08 4/200 2026-04-13 00:20 by baobaoye
[¿¼ÑÐ] 281Çóµ÷¼Á +11 ¾õµÃºÃµÄ°É 2026-04-10 11/550 2026-04-11 09:35 by ÄæË®³Ë·ç
[¿¼ÑÐ] ÉúÎïѧ308Çóµ÷¼Á£¨Ò»Ö¾Ô¸»ª¶«Ê¦´ó£© +6 ÏàÐűػá¹ââÍòÕ 2026-04-10 6/300 2026-04-11 05:23 by zhuwenxu
[¿¼ÑÐ] 289 ·Ö105500ҩѧר˶Çóµ÷¼Á(ÕÒBÇøÑ§Ð£) +6 °×ÔÆ123456789 2026-04-09 8/400 2026-04-10 21:13 by zhouxiaoyu
[¿¼ÑÐ] 287Çóµ÷¼Á +15 Fnhc 2026-04-07 21/1050 2026-04-10 19:09 by chemisry
[¿¼ÑÐ] 293µ÷¼Á +25 yj1221 2026-04-08 26/1300 2026-04-10 15:02 by ²ñС°×
[¿¼ÑÐ] 282£¬µçÆø¹¤³Ìרҵ£¬Çóµ÷¼Á£¬²»Ìôרҵ +9 jggshjkkm 2026-04-10 9/450 2026-04-10 14:55 by ÄæË®³Ë·ç
[¿¼ÑÐ] 292Çóµ÷¼Á +9 ЦЦԬ 2026-04-09 9/450 2026-04-10 10:05 by LHGeng
[¿¼ÑÐ] 297Çóµ÷¼Á +27 GENJIOW 2026-04-07 30/1500 2026-04-09 23:20 by wolf97
[¿¼ÑÐ] ²ÄÁÏר˶(0856) 339·ÖÇóµ÷¼Á +9 ¹þ¹þ¹þ¶ì¹þ¹þ¹þ 2026-04-09 10/500 2026-04-09 20:01 by Orcid
[¿¼ÑÐ] µ÷¼Á +19 2261744733 2026-04-08 19/950 2026-04-09 19:11 by vgtyfty
[¿¼ÑÐ] ¿¼Ñе÷¼Á +13 ±ù±ù£¬£¬£¬ 2026-04-07 13/650 2026-04-09 17:01 by Lilly_Li
[¿¼ÑÐ] 283µç×ÓÐÅÏ¢Çóµ÷¼Á +4 ÈýʯWL 2026-04-08 4/200 2026-04-09 10:21 by wp06
[¿¼ÑÐ] 270Çóµ÷¼Á +3 031127 2026-04-06 4/200 2026-04-08 21:00 by ÄæË®³Ë·ç
[¿¼ÑÐ] 264Çóµ÷¼Á +11 ÂóС¶£µ± 2026-04-07 11/550 2026-04-08 16:05 by Ò»Ö»ºÃ¹û×Ó?
[¿¼ÑÐ] 22408 µ÷¼Á²ÄÁÏ +7 ÎÒ½Ðez 2026-04-06 8/400 2026-04-07 17:12 by À¶ÔÆË¼Óê
[¿¼ÑÐ] ÐŹ¤Ëù11408 340·Ö ±¾¿ÆÎ÷°²½»´ó×Ô¶¯»¯ +3 moontrek 2026-04-06 3/150 2026-04-07 09:56 by chongya
ÐÅÏ¢Ìáʾ
ÇëÌî´¦ÀíÒâ¼û