نمایش نتایج 1 تا 4 از 4

نام تاپیک: استفاده از توابع #c در ++c

  1. #1

    استفاده از توابع #c در ++c

    سلام

    من یک سری کتابخانه #c دارم ، که برای سی پلاس پلاس وجود نداره . حالا می خواهم از این کتابخانه ها در

    سی پلاس پلاس استفاده کنم . امکان استفاده وجود داره ؟

    کتابخانه ها به زبان جاوا ، پایتون ، جاوااسکریپت ، رابی و سی شارپ است ولی سی پلاس پلاس نداره . ممنون

    ( IDE::Qt )

  2. #2

    نقل قول: استفاده از توابع #c در ++c

    نقل قول نوشته شده توسط vertionality مشاهده تاپیک
    سلام

    من یک سری کتابخانه #c دارم ، که برای سی پلاس پلاس وجود نداره . حالا می خواهم از این کتابخانه ها در

    سی پلاس پلاس استفاده کنم . امکان استفاده وجود داره ؟

    کتابخانه ها به زبان جاوا ، پایتون ، جاوااسکریپت ، رابی و سی شارپ است ولی سی پلاس پلاس نداره . ممنون

    ( IDE::Qt )
    اگر کتابخانه ها DLL باشند(البته اونهایی که با سی شارپ هستند) که خوب بله به راحتی می تونید از DllImport استفاده کنید تست کد هم زیاد هست برای استفاده...
    برای جاوا هم می تونید یک Shared Object یا همون so فایل تهیه کنید البته به یکسری رابط نیازدارید در حقیقت باید JAR لایبرری جاوا را به so فایل تبدیل کنید و البته در لینوکس و در ++c استفاده کنید البته تو فریم وورک qt هم می تونید ازش استفاده کنید.

  3. #3

    نقل قول: استفاده از توابع #c در ++c

    نقل قول نوشته شده توسط farhad_shiri_ex مشاهده تاپیک
    اگر کتابخانه ها DLL باشند(البته اونهایی که با سی شارپ هستند) که خوب بله به راحتی می تونید از DllImport استفاده کنید تست کد هم زیاد هست برای استفاده...
    برای جاوا هم می تونید یک Shared Object یا همون so فایل تهیه کنید البته به یکسری رابط نیازدارید در حقیقت باید JAR لایبرری جاوا را به so فایل تبدیل کنید و البته در لینوکس و در ++c استفاده کنید البته تو فریم وورک qt هم می تونید ازش استفاده کنید.
    اره اگر dll بود خوب بود . متاسفانه nupkg است ولی جاوا همه اش .jar هست . اگر جاوا ها را به so تبدیل کنم چه جوری باید برنامه اش را بنویسم با

    ++c بنویسم متوجه میشه کامپایلر ؟ نسخه ی exe می خواهم خیلی پلتفرم دیگر مهم نیست . ممنون

  4. #4

    نقل قول: استفاده از توابع #c در ++c

    نقل قول نوشته شده توسط vertionality مشاهده تاپیک
    اره اگر dll بود خوب بود . متاسفانه nupkg است ولی جاوا همه اش .jar هست . اگر جاوا ها را به so تبدیل کنم چه جوری باید برنامه اش را بنویسم با

    ++c بنویسم متوجه میشه کامپایلر ؟ نسخه ی exe می خواهم خیلی پلتفرم دیگر مهم نیست . ممنون
    دوست عزیز !
    اگر برای so. لایبرری منظورتون هست ...

    #pragma once
    #ifndef __PLUGIN_H__
    #define __PLUGIN_H__

    #include <memory>
    #include <string>
    #include <dlfcn.h>

    class Plugin
    {
    public:
    virtual ~Plugin() {}

    virtual void func1() = 0;
    virtual void func2() = 0;
    };

    typedef std::shared_ptr<Plugin> PluginPtr;

    class PluginLoader
    {
    public:
    PluginPtr operator()(const std::string& file);
    };

    #endif // __PLUGIN_H__

    ------------------------------------------------------------------------
    #include "plugin.h"
    #include <stdexcept>

    PluginPtr PluginLoader::operator()(const std::string& file)
    {
    union { void* dl; void* dlsym; PluginPtr(*plugin)(); } get;

    if(!(get.dl = dlopen(file.c_str(), RTLD_NOW|RTLD_GLOBAL)))
    {
    throw std::runtime_error(dlerror());
    }

    // Obtain pointer to the Plugin creation factory function
    if(!(get.dlsym = dlsym(get.dl, "create_plugin")))
    {
    throw std::runtime_error(dlerror());
    }

    return get.plugin();
    }
    ------------------------------------------------------------------------
    #include "plugin.h"

    #include <iostream>

    class MyPlugin
    : public Plugin
    {
    public:

    virtual void func1()
    {
    std::cout << "func1()\n";
    }
    virtual void func2()
    {
    std::cout << "func2()\n";
    }
    };

    // Factory function MUST have C linkage
    extern "C" PluginPtr create_plugin()
    {
    return PluginPtr(new MyPlugin);
    }
    ------------------------------------------------------------------------

    #include "plugin.h"
    #include <iostream>
    #include <stdexcept>

    int main()
    {
    PluginLoader load;
    PluginPtr plugin;

    try
    {
    plugin = load("build/src/.libs/myplugin.so");
    if(plugin)
    {
    plugin->func1();
    plugin->func2();
    }
    }
    catch(std::runtime_error& e)
    {
    std::cout << e.what() << '\n';
    }

    }


    توجه داشته باشید برای اینکه بتونید اشاره گرهای به تابع را تعریف کنید حتما باید بدونید که چه تابعی در لایبرری با چه امضا و چه پارامترهایی دارید که بتونید فراخوانی کنید.
    مثال بالا خیلی سر راست هست !
    نیاز به توضیح بود بفرمایید.
    آخرین ویرایش به وسیله farhad_shiri_ex : سه شنبه 06 شهریور 1397 در 08:38 صبح

تاپیک های مشابه

  1. چگونگی استفاده از توابع API در دات نت؟
    نوشته شده توسط bachemosbat در بخش C#‎‎
    پاسخ: 9
    آخرین پست: پنج شنبه 15 آذر 1386, 01:34 صبح
  2. استفاده از توابع اکسل در وی بی دات نت
    نوشته شده توسط Sharif Lotfi در بخش VB.NET
    پاسخ: 0
    آخرین پست: دوشنبه 02 آبان 1384, 09:34 صبح
  3. استفاده از توابع TAPI در دلفی
    نوشته شده توسط babila در بخش برنامه نویسی در Delphi
    پاسخ: 9
    آخرین پست: یک شنبه 26 مهر 1383, 11:11 صبح
  4. استفاده از توابع کاربر در کریستال رپورت
    نوشته شده توسط jafari1 در بخش گزارش سازی با Crystal Report
    پاسخ: 0
    آخرین پست: یک شنبه 02 فروردین 1383, 21:34 عصر
  5. پاسخ: 13
    آخرین پست: دوشنبه 03 آذر 1382, 02:04 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •