【发布时间】:2011-10-19 22:28:42
【问题描述】:
我正在使用 MySQL 嵌入式库并使用 P/Invoke 调用必要的函数来启动服务器。我们在this 主题中解决了一些与它相关的问题,但是另一个问题已经出现了。
mysql_server_init() 函数成功返回 0,错误返回 1。不幸的是,在我的代码中,当它返回 1 并且我使用 Marshal.GetLastWin32Error() 时,错误代码为 0。我假设它没有发现 mysql_server_init() 生成的错误,但我不知所措如何找出问题所在。
这里是相关的代码块...
[DllImportAttribute("libmysqld.dll", SetLastError = true)]
static extern int mysql_server_init(int argc, string[] argv, string[] groups);
static string[] server_options = new string[2];
static string[] server_groups = new string[3];
public static bool Start()
{
server_options[0] = "mysql_test"; // not used?
server_options[1] = "--defaults-file=./my.ini";
server_groups[0] = "client";
server_groups[1] = "server";
server_groups[2] = "\0";
if (mysql_server_init(2, server_options, server_groups) != 0)
{
int lastError = Marshal.GetLastWin32Error();
Console.WriteLine("MySQL Library Init Failed with error code: " + lastError);
return false;
}
Console.WriteLine("MySQL Library Started Successfully!");
return true;
}
【问题讨论】:
-
mysql_server_init 是否调用 SetLastError()?我在文档中没有看到任何迹象:dev.mysql.com/doc/refman/5.6/en/mysql-server-init.html
标签: c# mysql interop pinvoke embedded-database