كيفية استدعاء خاصية C++ الأصلية من C#
-
21-12-2019 - |
سؤال
أنا لست جيدًا في 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 #
أو
باستخدام: [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
}