से लिंक करें शीर्षक के अनुसार, मैं सी का उपयोग करके डीएलएल बनाने और इसे C++ प्रोजेक्ट से लिंक करने का प्रयास कर रहा हूं। मैंने इंटरनेट पर विभिन्न ट्यूटोरियल पढ़े और उनका पालन किया लेकिन हर बार कुछ गायब है और मुझे समझ में नहीं आता है।सी में एक डीएलएल बनाएं और इसे C++ प्रोजेक्ट
यहाँ मैं क्या किया, कदम से कदम है:
मैं एक नया Win32 परियोजना, तो testlib
नाम है, बनाया, जादूगर से, मैं "DLL" और "खाली परियोजना" चुना है।
जोड़ा एक हैडर:
//testlib.h
#include <stdio.h>
__declspec(dllexport) void hello();
जोड़ा एक स्रोत; के बाद से मैं इसे एक सी स्रोत होना चाहता हूँ मैंने पढ़ा है मैं simplly ग में सीपीपी फ़ाइल का नाम बदलने चाहिए, ताकि
//testlib.c
#include "testlib.h"
void hello() {
printf("DLL hello() called\n");
}
बिल्ड succeded।
अब मैं किसी अन्य प्रोजेक्ट में अपने उपयोगी डीएल का उपयोग करना चाहता हूं।
फिर: नई परियोजना (testlibUse
)। इस बार मैंने "खाली परियोजना" चुना।
एक शीर्ष लेख जोड़ने के लिए कोई ज़रूरत नहीं है, बस एक cpp स्रोत
//main.cpp
#include <testlib.h>
int main() {
hello();
}
फिर बनाया:
मैं फ़ोल्डर है जहाँ गुण में
testlib.dll
> कुलपति ++ directories-> निष्पादन निर्देशिका है करने के लिए पथ जोड़ामैं कुलपति ++ directories-> निर्देशिका शामिल करें फ़ोल्डर है जहाँ गुण में
testlib.h
> है करने के लिए पथ जोड़ा 012,
मैं
testlib.lib
(शामिल विस्तार) गुण में> Linker-> इनपुट-> अतिरिक्त निर्भरता
मैं निर्माण करने की कोशिश करने के लिए पथ जोड़ा है, लेकिन मैं एक लिंकर त्रुटि मिली:
LINK : C:\path\testlibUse\Debug\testlibUse.exe not found or not built by the last incremental link; performing full link
main.obj : error LNK2019: unresolved external symbol "void __cdecl hello(void)" ([email protected]@YAXXZ) referenced in function _main
C:\path\testlibUse\Debug\testlibUse.exe : fatal error LNK1120: 1 unresolved externals
अगर मैं testlib
पर वापस जाता हूं, testlib.cpp
में वापस नाम बदलें और डीएलएल का पुनर्निर्माण करें, तो मैं testlibUse
बनाने में सक्षम हूं लेकिन मुझे रनटाइम पर "dll नहीं मिला" त्रुटि मिलती है।
मैंने "रिलीज" (आवश्यक पथ को बदलने) में दोनों परियोजनाओं की कॉन्फ़िगरेशन को बदलने की कोशिश की, लेकिन कुछ भी नहीं बदला।
लंबी पोस्ट के लिए खेद है, लेकिन मुझे लगता है कि मैंने जो कुछ किया है उसे लिखना आवश्यक था।
कोई सुझाव?
इसके अलावा, क्या कोई कॉन्फ़िगरेशन पैरामीटर हैं जो मुझे बदलने की ज़रूरत है यदि मैं एक क्यूटी परियोजना में अपने डीएल का उपयोग करना चाहता हूं?
लेकिन मैं क्रम में एक "नहीं मिला DLL" त्रुटि मिलती है ... गुण> कुलपति ++ directories-> निष्पादन निर्देशिका में dll के लिए पथ को जोड़ने के लिए पर्याप्त नहीं था? – Saphrosit
@ सैफ्रोसिट: नहीं, मेरे सबसे अच्छे ज्ञान के लिए, जो ऐप के चलने को प्रभावित नहीं करेगा। उस प्रॉपर्टी पेज पर विवरण पढ़ें; यह परियोजना के निर्माण के दौरान द्विआधारी की खोज को प्रभावित करता है। रनटाइम पर आपको डीएलएल मिलना चाहिए (उदाहरण के लिए, पाथ पर्यावरण चर के माध्यम से)। –