2016-03-23 22 views
0

AB.dll (ve AB.lib) için derlenmiş.dllexport statik sınıf yöntemleri

class __declspec(dllimport) B 
{ 
public: 
    //... 
    void bar() 
    { 
     A::foo(); 
    } 
}; 

Birincisi: Eğer B sınıfı IMPORTED söylüyorlar, çalışıyor Şimdi ana programı: dosya diyor başlık zaman

int main() 
{ 
    B b; 
    b.bar(); 
    return 0; 
} 

When compiling the main program and linking it to AB.lib, 
it complains about the A::foo() as unresolved external symbol 
(in this case A::foo is a static function). 
Do I need to somehow export A::foo() or could it be that 
I introduce errors somewhere? Any help is appreciated. 

Modified: 
1) Sorry for the type, it should be dllexport, not dllimport 
2) in my actual project, the implementation is in .cpp files. They are not inline functions. 
Thanks. 
+0

http://stackoverflow.com/questions/35048940/what-does-this-c-class-declaration-mean yanıtları yardımcı olabilir. –

+0

Kaynak dosyada "B :: bar" uygulamasının koyulmasını sağlayın. Eğer “A” sadece “B” kaynağında kullanılıyorsa, dışa aktarmanız gerekmemelidir. –

+1

Bağlayıcıya B :: bar() çözümlemenin iki yolunu verdiniz. Tanımı .h dosyasından kullanabilir veya AB.lib dosyasında kullanabilir. Bu kesin bir sonuç, .obj dosyasında bulunduğundan, .h dosyasındaki her zamanki gibi olacaktır. Şimdi A :: foo() çözümlemesi gerekiyor. Balina başarısız, AB.lib sahip değil. Tanımı .h dosyasında kaldırmanız ve derleyicinin kullanamayacağı şekilde .cpp dosyasına taşımanız gerekir. –

cevap

0

ben kod gösterdi varsayalım, sonra .h başlık dosyasında olduğunu ana uygulamanız için, ancak dll için çalışmıyor.

İkincisi: B :: bar() yerine ya doğrudan ana APP YÜRÜTÜLMEKTEDİR, dll İTHAL DEĞİLDİR (derleyici sizin başlık dosyasına doğrudan readding edilir ve dll aktardığınız değildir)

Tavsiyeler:

İLK: Buna benzer başlık dosyasını yeniden tanımlamak:

class __declspec(dllimport) B 
{ 
public: 
    //... 
    void bar(); 
}; 

Ve dll projede bir cpp dosyasında yöntemi B :: çubuğu uygulamak

İKİNCİ: başlık dosyasından A sınıfını kaldırın (yapabiliyorsanız)

İlgili konular