سؤال

أنا لست جيدًا في C ++ ولكن ، ..على سبيل المثال لدي هذا

#define GETSomthing_API  __declspec(dllexport)
extern GETSomthing_API int nGetSomthing;

والطريقة التي أريد استيرادها هكذا

GETSomthing_API  int GetSomthing(const char* szConfigPath, char *A, int B)

كيف يمكنني استدعاء هذا من C#؟

بجانب ، أعتقد أن مشكلتي هي مع نوع المعلمة (const char*) في جانب C ++ ، ما هو النوع المتساوي في C# لذلك!حرف ثابت*

شكرًا،

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

المحلول

href="https://stackoverflow.com/Questions/9407616/how-to-call-c-code-from-c-sharp"> كيفية الاتصال رمز C ++ من C #

أو

استدعاء وظيفة C ++ من C #

باستخدام: [dllimport ("xxx.dll")] xxx.dll هو ترجمة بواسطة C ++

نأمل هذه المساعدة.

نصائح أخرى

هناك طريقتان للاتصال بالرمز الأصلي من C#.ربما يكون الأسهل هو الاستخدام P/Invoke.لنفترض أن وظيفتك مثل:

extern "C" int nGetSomeThing(void);

ويتم تجميعه في ملف YourDllName.dll، ويمكنك استخدام P/Invoc للاتصال مباشرة بالتعليمات البرمجية غير المُدارة بالطريقة التالية من كود C#:

public static class interop
{
    [DllImport("YourDllName.dll")]
    static extern public int nGetSomeThing(void);
}
...
interop.nGetSomething() // call to the native function

يشير إلى : http://msdn.microsoft.com/en-us/library/aa288468%28VS.71%29.aspx.

إذا كان لديك الكثير من الوظائف ذات التوقيعات المعقدة، فمن المحتمل أن تختار طبقة التشغيل المتداخل في C++/CLI.يشير إلى : http://www.codeproject.com/Articles/19354/Quick-C-CLI-Learn-C-CLI-in-less-than-10-Minutes

أضفت فقط __cplusplus، وعملت!

giveacodicetagpre.

خارجي "C" {

endif

giveacodicetagpre.

ifdef __cplusplus

}

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