33
33
int callSumFunc (char * path , char * funcName , int a , int b );
34
34
char * callSumStringFunc (char * path , char * funcName , char * a , char * b );
35
35
36
+ void * loadSymbol (char * path , char * funcName );
37
+
36
38
int main ()
37
39
{
38
40
// Check if the library file exists
@@ -54,43 +56,53 @@ int main()
54
56
CoTaskMemFree (sumstring );
55
57
}
56
58
57
- int callSumFunc (char * path , char * funcName , int firstInt , int secondInt )
59
+ void * loadSymbol (char * path , char * funcName )
58
60
{
59
- // Call sum function defined in C# shared library
61
+ // Library loading
60
62
#ifdef _WIN32
61
63
HINSTANCE handle = LoadLibraryA (path );
62
64
#else
63
65
void * handle = dlopen (path , RTLD_LAZY );
64
66
#endif
67
+ if (!handle )
68
+ {
69
+ #ifdef _WIN32
70
+ int errorCode = GetLastError ();
71
+ printf ("Failed to load library at specified path. Error code: %d\n" , errorCode );
72
+ #else
73
+ puts ("Failed to load library at specified path" );
74
+ #endif
75
+ return NULL ;
76
+ }
77
+
78
+ // Declare a typedef
79
+ typedef char * (* myFunc )(char * ,char * );
80
+
81
+ // Import Symbol named funcName
82
+
83
+ // NativeAOT libraries do not support unloading
84
+ // See https://github.com/dotnet/corert/issues/7887
85
+ return symLoad (handle , funcName );
86
+ }
65
87
88
+ int callSumFunc (char * path , char * funcName , int firstInt , int secondInt )
89
+ {
66
90
typedef int (* myFunc )(int ,int );
67
- myFunc MyImport = (myFunc )symLoad ( handle , funcName );
91
+ myFunc MyImport = (myFunc )loadSymbol ( path , funcName );
68
92
69
93
int result = MyImport (firstInt , secondInt );
70
-
71
- // NOTE: Native AOT libraries do not support unloading
72
94
return result ;
73
95
}
74
96
75
97
char * callSumStringFunc (char * path , char * funcName , char * firstString , char * secondString )
76
98
{
77
- // Library loading
78
- #ifdef _WIN32
79
- HINSTANCE handle = LoadLibraryA (path );
80
- #else
81
- void * handle = dlopen (path , RTLD_LAZY );
82
- #endif
83
-
84
99
// Declare a typedef
85
100
typedef char * (* myFunc )(char * ,char * );
86
101
87
102
// Import Symbol named funcName
88
- myFunc MyImport = (myFunc )symLoad ( handle , funcName );
103
+ myFunc MyImport = (myFunc )loadSymbol ( path , funcName );
89
104
90
105
// The C# function will return a pointer
91
106
char * result = MyImport (firstString , secondString );
92
-
93
- // CoreRT libraries do not support unloading
94
- // See https://github.com/dotnet/corert/issues/7887
95
107
return result ;
96
108
}
0 commit comments