VB程序员博客
VB生成的DLL中调用的函数TestCallDll:
Public Function TestCallDll()
Dim strXML As String
Dim strXMLFileName As String
MsgBox "0001"
strXMLFileName = App.Path & " est.xml"
MsgBox "0002"
MsgBox strXMLFileName
Open strXMLFileName For Input As #1
MsgBox "0003"
strXML = Input(FileLen(strXMLFileName), #1)
MsgBox "0004"
Close #1
MsgBox "0005"
End Function
可以肯定的是,上面的TestCallDll()函数在VB环境下是能运行通过的。随便写的VB的exe程序测试即可。
生成DLL之后,在VC中调用,单步运行,通过观察弹出信息框,可以证明在运行DLL中的“ Open strXMLFileName For Input As #1 ”时出错。出错弹出信息:
—————————
Microsoft Visual C++
—————————
Unhandled exception in VCClient.exe (KERNEL32.DLL): 0xE06D7363: Microsoft C++ Exception.
—————————
确定
—————————
请问,我该如何更改程序,才能正确运行?
(提示:当你正确回答了这个问题,可以到这里VC板块这个问题里随便答一下,30分送上。。。)
试下不用App.Path 而用固定路径,或者将这个方法加个路径参数
注册一下你的DLL就行
Dim pid As Integer
pid = Shell("ffmpeg.exe -i c:MediaMV.flv -y c:MediaMV.avi")
把里面的 c:MediaMV.flv 换成 strInputFLV
Dim strInputFLV As String
strInputFLV = "c:MediaMV.flv"
就没有反应了, 请指教如何传递 源文件和 转换后文件。
谢谢,可以通过,但对文件目录中有空格 或 文件名有空格的(例如C:my filesmusic 或者 2008和路雪可爱多广告 剧情篇.flv) FFMPEG命令认为是不同部分,不予执行:
Dim pid As Integer
Dim strShell As String
strShell = App.Path & "ffmpeg.exe -i " & txtInputFile.Text & " -y " & frmMain.txtFolder.Text & (StripPath$(frmMain.txtInputFile.Text) & ".avi")
pid = Shell(strShell)
如何解决?
哦,加上 Chr(34) & 到里面就可,结贴送分。
知道在VC里面可以直接用query,
但是生成的TLB,在VB中应该如何用呢?请各位帮帮忙啊
工程-引用-浏览
已经引进来了,然后我想用里面的函数,是不是得用CREATEOBJECT啊?可我不知道这个函数里面传什么值
不需要
直接 dim obj As LibName.ClassName 就可以了。
打开 查看-对象浏览器 看看。
一般是dim 后,再搞一句set obj = new LibName.ClassName
CreateObject这是晚绑定方式,性能差一些,但不需要做那个引用操作的,跟的参数是字符串形式的ProgID
谢谢大家关注,问题已经解决~
05 12th, 2010
用vc做了一个ocx控件,在vc和js里面测试都没有问题
但是客户说在vb下面测试有问题,不能正确的初始化,
请问一下,vb怎么调用ocx呢?
我要在vb下面测试一下,谢谢。。。。。
up~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
虚惊一场啊,客户重新注册了一下ocx,就好用了,但是具体问题原因神鬼不知啊。。。。
05 4th, 2010
DLL代码
int __stdcall myadd(int a, int b)
{
return a + b;
}
已经导出了.静态调用成功
但是我想用LoadLibrary来调用..不知道怎么写这个代码.(网上看过一个SetWindowText的例子..运行了VB直接弹BUG退出了)
有人能指点下么?
附上我调用不成功的代码..
Dim hModule As Long, ProcAddress As Long
hModule = LoadLibrary("c:Demodll.dll")
If hModule = 0 Then MsgBox "载入DLL失败": Exit Sub
ProcAddress = GetProcAddress(hModule, "myadd")
If ProcAddress = 0 Then MsgBox "得函数入口失败": Exit Sub
CallWindowProc ProcAddress, Me.hWnd, ByVal 0&, ByVal 0&, ByVal 0&
FreeLibrary hModule
不要静态调用..静态的我已经测试通过了.呵呵..谢谢二楼的回复
以上就是静态调用,只不过是显式调用而已。
LoadLibrary 方式,微软不建议使用。
以上就是动态调用,只不过是显式调用而已。
LoadLibrary 方式,微软不建议使用。
VB 不存在静态调用动态库。
不建议使用那就是可以使用.- -可是怎么使用呢..
结贴..
解决办法
http://topic.csdn.net/u/20080928/15/287c677b-69e6-432e-9f77-ee58b3fa619f.html
05 4th, 2010
DLL代码
int __stdcall myadd(int a, int b)
{
return a + b;
}
已经导出了.静态调用成功
但是我想用LoadLibrary来调用..不知道怎么写这个代码.(网上看过一个SetWindowText的例子..运行了VB直接弹BUG退出了)
有人能指点下么?
附上我调用不成功的代码..
Dim hModule As Long, ProcAddress As Long
hModule = LoadLibrary("c:Demodll.dll")
If hModule = 0 Then MsgBox "载入DLL失败": Exit Sub
ProcAddress = GetProcAddress(hModule, "myadd")
If ProcAddress = 0 Then MsgBox "得函数入口失败": Exit Sub
CallWindowProc ProcAddress, Me.hWnd, ByVal 0&, ByVal 0&, ByVal 0&
FreeLibrary hModule
不要静态调用..静态的我已经测试通过了.呵呵..谢谢二楼的回复
以上就是静态调用,只不过是显式调用而已。
LoadLibrary 方式,微软不建议使用。
以上就是动态调用,只不过是显式调用而已。
LoadLibrary 方式,微软不建议使用。
VB 不存在静态调用动态库。
不建议使用那就是可以使用.- -可是怎么使用呢..
结贴..
解决办法
http://topic.csdn.net/u/20080928/15/287c677b-69e6-432e-9f77-ee58b3fa619f.html
05 2nd, 2010
在窗体上有image控件和ImageList控件
求:Image控件调用ImageList的方法.
Private Sub Form_Load()
Me.Picture1.Picture = Me.ImageList1.ListImages(1).Picture
DoEvents
End Sub
现在有个问题是.
图片是原大,不能自动调节,适应Picture1的窗口大小.
结果,只显示图片的局部,不能显示全部图片.
装到ImageList的图片的尺寸是
高541,宽951
在Me.Picture1.Picture只能显示局部,不能显示全部.
越绕越乱.
目标需求是
图片框一定Image一定时.装入的图片按自动调节适应到图片框中.
upupup
<
CAD配合应用程序.
Sub ls()
On Error Resume Next
Dim Ent As AcadEntity
With ThisDrawing
For Each Ent In .ModelSpace
If Ent.Layer = "细实线" Then
Ent.color = 0
End If
Next Ent
.SelectionSets("*TlsDbx*").Delete
End With
Set ss = ThisDrawing.SelectionSets.Add("*TlsDbx*")
’ss.AddItems pObj
Dim pathName, fileName
pathName = "C:Documents and SettingsAdministrator桌面\压力容器制造VBWMF"
fileName = "SO_MFM"
ThisDrawing.Export pathName & fileName, "wmf", ss
ss.Delete
End Sub
04 5th, 2010
自动编号有数据后,我要把数据库的记录全删除,那它的编号怎样才会再从1开始?
Truncate Table tablename
*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码)
http://feiyun0112.cnblogs.com/
清空的时候使用如下语句:
TRUNCATE TABLE TableName
我上次也遇到过这个问题
就是用TRUNCATE TABLE TableName 这个解决的
楼上的全对
这好像与VB没关系吧,与数据库有关
不知道你是啥数据库,应该不是ORACLE
我记得ORACLE里是没自动编号的字段,只有序列
Private Sub cmdshangbao_Click()
Dim i, j, k As Integer
Dim int_file As Integer
Dim filename As String
Dim filepath As String
Dim fso1, fso2
Dim fil1, fil2
Dim RetVal
Set fso1 = CreateObject("Scripting.FileSystemObject")
Set fil1 = fso1.CreateTextFile("c:ftp_file.txt", True)
fil1.writeline ("open 192.168.1.120")
fil1.writeline ("user audit01 123456 ")
Set fso2 = CreateObject("Scripting.FileSystemObject")
Set fil2 = fso2.CreateTextFile("c:ftp_file.bat", True)
fil2.writeline ("ftp -in < ftp_file.txt")
If Me.ListBox1.ListCount = 0 Then
MsgBox "没有文件,退出!"
Exit Sub
End If
int_file = Me.ListBox1.ListCount
For i = 0 To int_file - 1
filename = Trim(Me.ListBox1.List(i))
filepath = "put " & ActiveWorkbook.Path & "" & filename & " " & filename
fil1.writeline (filepath)
Next
fil1.writeline ("by ")
RetVal = Shell("c:ftp_file.bat", vbMaximizedFocus) '这里总是报无效的过程调用或参数,为啥fil1.Close
fil2.Close
MsgBox "文件上传完成!"
Kill "c:ftp_file.txt"
Kill "c:ftp_file.bat"
End Sub
我在dos下执行c:ftp_file.bat完全正常,为什么?
改为
RetVal = Shell("cmd /c c:ftp_file.bat", vbNormalFocus)
试试
C/前后各一个空格,vbNormalFocus无所谓.
我改成了RetVal = Shell("cmd /c c:ftp_file.bat", vbNormalFocus),
可以为什么出来的ftp命令成了:
d:>ftp -in 0 <ftp_file.txt
而bat中的文件内容为:ftp -in <ftp_file.txt
shell出来的结果多了个0,导致无法连接,为什么?
Shell("cmd /c c:ftp_file.bat")仅是调用cmd.EXE去执行c:ftp_file.bat文件,仅此而已.
去掉参数/c 试一下:
Shell("cmd c:ftp_file.bat")
谢谢SYSSZ,已经找到原因
把这两句移到前面就没有问题了
fil1.Close
fil2.Close
RetVal = Shell("c:ftp_file.bat", vbMaximizedFocus)
Private Sub cmdshangbao_Click()
Dim i, j, k As Integer
Dim int_file As Integer
Dim filename As String
Dim filepath As String
Dim fso1, fso2
Dim fil1, fil2
Dim RetVal
Set fso1 = CreateObject("Scripting.FileSystemObject")
Set fil1 = fso1.CreateTextFile("c:ftp_file.txt", True)
fil1.writeline ("open 192.168.1.120")
fil1.writeline ("user audit01 123456 ")
Set fso2 = CreateObject("Scripting.FileSystemObject")
Set fil2 = fso2.CreateTextFile("c:ftp_file.bat", True)
fil2.writeline ("ftp -in < ftp_file.txt")
If Me.ListBox1.ListCount = 0 Then
MsgBox "没有文件,退出!"
Exit Sub
End If
int_file = Me.ListBox1.ListCount
For i = 0 To int_file - 1
filename = Trim(Me.ListBox1.List(i))
filepath = "put " & ActiveWorkbook.Path & "" & filename & " " & filename
fil1.writeline (filepath)
Next
fil1.writeline ("by ")
RetVal = Shell("c:ftp_file.bat", vbMaximizedFocus) '这里总是报无效的过程调用或参数,为啥fil1.Close
fil2.Close
MsgBox "文件上传完成!"
Kill "c:ftp_file.txt"
Kill "c:ftp_file.bat"
End Sub
我在dos下执行c:ftp_file.bat完全正常,为什么?
改为
RetVal = Shell("cmd /c c:ftp_file.bat", vbNormalFocus)
试试
C/前后各一个空格,vbNormalFocus无所谓.
我改成了RetVal = Shell("cmd /c c:ftp_file.bat", vbNormalFocus),
可以为什么出来的ftp命令成了:
d:>ftp -in 0 <ftp_file.txt
而bat中的文件内容为:ftp -in <ftp_file.txt
shell出来的结果多了个0,导致无法连接,为什么?
Shell("cmd /c c:ftp_file.bat")仅是调用cmd.EXE去执行c:ftp_file.bat文件,仅此而已.
去掉参数/c 试一下:
Shell("cmd c:ftp_file.bat")
谢谢SYSSZ,已经找到原因
把这两句移到前面就没有问题了
fil1.Close
fil2.Close
RetVal = Shell("c:ftp_file.bat", vbMaximizedFocus)