背景:
最近想做一个 MySQL 语法相关的东东,需要把 SQL 语句解析出来,找到了现成的 DLL: db.mysql.sqlparser.grt.dll
这个在 MySQL 官网工具 WorkBench 中自带(工具和源代码可以在官网下载 ,源码看起来是VC的)
问题:
如何在 .net 中使用 db.mysql.sqlparser.grt.dll?
我只会 C#和 VB,所以VC源代码看不懂
直接添加引用是行不通的,在网上找到的方法是 DLLImport方法也是行不通的
https://social.msdn.microsoft.com/Forums/vstudio/en-US/4624961a-bbd7-4b19-811c-bda211d2d87c/c-dll-in-vbnet?forum=vbgeneral
Module Module1
Declare Function checkSqlSyntax Lib "c:\WorkBench\db.mysql.sqlparser.grt.dll" _
Alias "?checkSqlSyntax@MysqlSqlFacadeImpl@@UEAAHAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z" _
(ByVal sql As String) As Integer
Sub Main()
Console.WriteLine(checkSqlSyntax("select 1"))
End Sub
End Module
Alias 中的内容是通过 Dumpbin 查到的,测试调用的函数在源码这些地方看得到
-- Modules --> db.mysql.sqlparser.grt --> Header Files --> mysql_sql_facade.h
DECLARE_MODULE_FUNCTION(MysqlSqlFacadeImpl::checkSqlSyntax),
-- Modules --> db.mysql.sqlparser.grt --> Source Files --> mysql_sql_facade.cpp
int MysqlSqlFacadeImpl::checkSqlSyntax(const std::string &sql)
{
return Mysql_sql_syntax_check::create(get_grt())->check_sql(sql.c_str());
}
我的调用报错:
尝试读取或写入受保护的内存。这通常指示其他内存已损坏