【发布时间】:2023-12-22 06:59:01
【问题描述】:
需要 SQLAnywhere (16) 中的扩展来访问运行数据库的服务器上的一些 DOS 功能,我尝试了:
要从 Sybase 调用的 DLL 的第一个代码
________! SAExternal.vb !____________
Imports System.Diagnostics
Public Class SAExternal
Public Shared Function getDone()
Dim myProcess As Process = System.Diagnostics.Process.Start("notePad.exe", "C:\data\CLR\zTest.txt")
myProcess.WaitForExit()
myProcess.Close()
getDone = "OK"
End Function
End Class
编译使用 :
vbc.exe /t:library /out:SAExt.dll SAExternal.vb
按照一些代码来测试我的 DLL
_________! SAMain.vb !______________
Module SAMain
Sub Main()
Dim obj as New SAExternal()
MsgBox("Test SAMain " & obj.getDone())
End Sub
End Module
编译使用:vbc.exe /t:winexe /r:SAExt.dll SAMain.vb
SAMain.exe 正确打开 notepad.exe,等到我关闭它,并带有消息“Test SAMain OK”
在 SQLAnywhere 中,我编写了代码:
CREATE FUNCTION getDone()
RETURNS LONG VARCHAR
EXTERNAL NAME 'C:\data\CLR\SAExternal\SAExt.dll::SAExternal.getDone() string'
LANGUAGE CLR
通过“Select getDone()”调用函数返回错误: “无法加载文件或程序集 'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=........' 或其依赖项之一......”
如果我取出 SAExternal 模块的 Process 部分:
Public Class SAExternal
Public Shared Function getDone()
getDone = "OK"
End Function
End Class
我的函数给了我正确的答案(“OK”)
出于测试目的,我将所有这些文件与我的数据库文件放在同一目录中,包括 .vb 和 .dll 。
我已经在网上搜索了几天以了解我做错了什么,但找不到我错过了什么。
有人可以帮我吗?
【问题讨论】:
标签: vb.net dll clr sqlanywhere external-process