【发布时间】:2011-10-19 14:17:01
【问题描述】:
在过去 12 小时左右的时间里,我一直试图让 MySQL Embedded Library 在我的 C# 应用程序中工作,并且已经卡住了很长一段时间。当我打电话给mysql_server_init()时出现以下错误...
未处理的异常:System.AcessViolationException:试图读取 或写受保护的内存。
C++ 方法接受一个int 和两个char** 作为参数,但有人告诉我一个空终止的string[] 数组在C# 中就足够了。由于这是您应该调用的第一个方法,因此我对这个问题有些茫然。
这是我的代码...
public class MySQLServer
{
[DllImport("libmysqld.dll")]
static extern int mysql_server_init(int argc, string[] argv, string[] groups);
[DllImport("libmysqld.dll")]
static extern void mysql_server_end();
public static bool Start()
{
string[] argv = new string[3];
argv[0] = "mysql_test";
argv[1] = "--datadir=C:/MYSQLTEST";
argv[2] = null;
string[] groups = new string[3];
groups[0] = "libmysqd_server";
groups[1] = "libmysqd_client";
groups[2] = null;
int res;
if ((res = mysql_server_init(3, argv, groups)) == 1)
{
Console.WriteLine("MySQL Library Init Failed with error code: %d", res);
return false;
}
Console.WriteLine("MySQL Library Started Successfully!");
return true;
}
}
【问题讨论】:
-
嗯,在您在@Mitch 的帖子中的评论中,您声明它会制作本地副本。它没有。它保留对它的引用。但是 MySql 对 C# 垃圾收集一无所知,所以 方法返回后,您的程序会崩溃。请参阅:bytes.com/topic/c-sharp/answers/…(相当深入的线程)
-
我不得不问你不能使用以下的原因:dev.mysql.com/doc/refman/5.1/en/connector-net.html
-
您可以随时自己修改和编译库。
-
我的理解是不适用于 MySQL 嵌入式库。
标签: c# .net mysql pinvoke dllimport