@@ -60,6 +60,7 @@ ClrHost::ClrHost() {
60
60
_initializeCoreCLR = nullptr ;
61
61
_shutdownCoreCLR = nullptr ;
62
62
_createDelegate = nullptr ;
63
+ _executeAssembly = nullptr ;
63
64
}
64
65
65
66
ClrHost::~ClrHost () {
@@ -122,6 +123,7 @@ bool ClrHost::loadCoreClr() {
122
123
_initializeCoreCLR = (coreclr_initialize_ptr)GetProcAddress (_coreClrLib, " coreclr_initialize" );
123
124
_shutdownCoreCLR = (coreclr_shutdown_2_ptr)GetProcAddress (_coreClrLib, " coreclr_shutdown_2" );
124
125
_createDelegate = (coreclr_create_delegate_ptr)GetProcAddress (_coreClrLib, " coreclr_create_delegate" );
126
+ _executeAssembly = (coreclr_execute_assembly_ptr)GetProcAddress (_coreClrLib, " coreclr_execute_assembly" );
125
127
#else
126
128
#ifdef __APPLE__
127
129
coreClrDllPath += " libcoreclr.dylib" ;
@@ -141,7 +143,7 @@ bool ClrHost::loadCoreClr() {
141
143
_createDelegate = (coreclr_create_delegate_ptr)dlsym (_coreClrLib, " coreclr_create_delegate" );
142
144
#endif
143
145
144
- if (_initializeCoreCLR == nullptr || _shutdownCoreCLR == nullptr || _createDelegate == nullptr ) {
146
+ if (_initializeCoreCLR == nullptr || _shutdownCoreCLR == nullptr || _createDelegate == nullptr || _executeAssembly == nullptr ) {
145
147
std::cerr << " [.NET] Unable to find CoreCLR dll methods" << std::endl;
146
148
147
149
return false ;
@@ -200,6 +202,24 @@ bool ClrHost::createAppDomain() {
200
202
return false ;
201
203
}
202
204
205
+ // execute assembly to set a valid entry point which is needed by some libraries as mysql
206
+ auto libraryPath = getAbsolutePath (std::string (PLUGIN_DIR_PATH) + PLUGIN_NAME);
207
+
208
+ result = _executeAssembly (
209
+ _runtimeHost,
210
+ _domainId,
211
+ 0 ,
212
+ nullptr ,
213
+ libraryPath.c_str (),
214
+ nullptr
215
+ );
216
+
217
+ if (result < 0 ) {
218
+ std::cerr << " [.NET] Unable to execute assembly: 0x" << std::hex << result << std::endl;
219
+
220
+ return false ;
221
+ }
222
+
203
223
return true ;
204
224
}
205
225
0 commit comments