For an exercise with uFFi i am try an C-Connector for MariaDB like Garage or UBDC As in "Unified FFI Februar 12 2020" I made Helper-classes:
FFILibrary subclass: #MariaDBLibC FFIOpaqueObject subclass: #MariaDBHandle MariaDBHandle >> unixModuleName [ ^ '/usr/lib/x86_64-linux-gnu/libmariadb.so' ] and a class Object subclass: #MariaDBDriver instanceVariableNames: 'connectionHandle' "Accessors" MariaDBDriver >> connectionHandle [ ^ connectionHandle ] MariaDBDriver >> connectionHandle: aHandle [ connectionHandle := aHandle ] MariaDBDriver class >> ffiLibrary [ ^ MariaDBLibC ] "API Methods" MariaDBDriver >> clientInfo [ ^ self class clientInfo ] MariaDBDriver class >> clientInfo [ ^ self ffiCall: #(String mysql_get_client_info(void)) ] For a first simple Test I choosed the c-api-funtion: „const char * mysql_get_client_info(void )“ In Playground I executed: driver := MariaDBDriver fromConnectionString: 'mariaDB://localhost:5432/sodbxtest?&user=sodbxtest&password=sodbxtest'. driver clientInfo inspect. And I get the expected result: String „10.2.9“ But the second test with c-api-funtcion fails „MYSQL * mysql_init(NULL)“ MariaDBDriver >> init [ | aNullHandle | aNullHandle := ExternalAddress null. self connectionHandle: (self class init: aNullHandle). ] MariaDBDriver class >> init: aNullHandle [ ^ self ffiCall: #(MariaDBHandle * mysql_init(ExternalAddress aNullHandle)). ] In Playground I again executed: driver := MariaDBDriver fromConnectionString: 'mariaDB://localhost:5432/sodbxtest?&user=sodbxtest&password=sodbxtest'. driver init inspect. " A call to an external function failed" Any ideas what is wrong?? Thanks Georg