相关文章推荐
活泼的大葱  ·  Excel ...·  1 年前    · 
Hello,
I created one Mono application to call C method from a shared library in Linux. My code is listed below
using System; using System.Runtime.InteropServices; namespace testConsole class MainClass [DllImport( " libTest.so" ,CharSet=CharSet.Auto,CallingConvention =CallingConvention.Cdecl, EntryPoint= " testMethod" ,SetLastError= true ) ] public static extern void testMethod(); public static void Main (string[] args) Console.WriteLine ( " Hello World!" ); testMethod(); Console.WriteLine ( " Hello World!" ); and my shared library code like this
#ifndef SFLOW_H #define SFLOW_H 1 #if defined(__cplusplus) extern " C" { #endif void testMethod() extern void testMethod1() printf( " This from C" ); #if defined(__cplusplus) } /* extern "C" */ #endif #endif /* SFLOW_H */
And I run the application I can load the library to C# using DllImport. But unable to call its method.How to call that testMethod() function from my mono application ?
Please help me...
The error like this
Hello World!
Unhandled Exception: System.EntryPointNotFoundException: testMethod
at (wrapper managed-to-native) testConsole.MainClass:testMethod ()
at testConsole.MainClass.Main (System.String[] args) [0x0000a] in /home/arun/Projects/testConsole/testConsole/Main.cs:15
[ERROR] FATAL UNHANDLED EXCEPTION: System.EntryPointNotFoundException: testMethod
at (wrapper managed-to-native) testConsole.MainClass:testMethod ()
at testConsole.MainClass.Main (System.String[] args) [0x0000a] in /home/arun/Projects/testConsole/testConsole/Main.cs:15
Press any key to continue... I'm so sorry, I did not notice that your question was tagged with Linux.
This is the closest thing I can find for you: http://stackoverflow.com/questions/2345657/p-invoke-and-mono-entrypointnotfoundexception [ ^ ]
Try this:
__declspec ( dllexport ) void testMethod() See (read carefully) the recent article: P/Invoke Tutorial: Basics (Part 1) [ ^ ]
Read this to understand __declspec(dllexport) see this conversation: http://social.msdn.microsoft.com/Forums/en/vclanguage/thread/47808016-c624-4c99-8250-06a138b11c06 [ ^ ]
For additional info on __declspec(dllexport) : http://msdn.microsoft.com/en-us/library/a90k134d(v=vs.80).aspx [ ^ ]
Additional note: Since you are explicit about the calling convention in C# ( CallingConvention =CallingConvention.Cdecl ), its better to use the same style in C too. So this would be better:
__declspec ( dllexport ) void __cdecl testMethod()
  • Read the question carefully.
  • Understand that English isn't everyone's first language so be lenient of bad spelling and grammar.
  • If a question is poorly phrased then either ask for clarification, ignore it, or edit the question and fix the problem. Insults are not welcome.
  • Don't tell someone to read the manual. Chances are they have and don't get it. Provide an answer or move on to the next question. Let's work to help developers, not make them feel stupid.
  •