VB程序员博客

VB程序开发

这是代码
Sub Call_Text()
Dim asm As New clsASM  '这个已近定义
With asm                            '  asm
    .Pushad                        '  pushad
    .Mov_EAX &H5A1F70              '  Mov EAX,&H5A2170
    .Call_EAX                      '  call pointer(eax)
    .Popad                          '  popad
    .Ret
End With                            '  end
asm.Run_ASM pid
End Sub
我想用CALL做一个简单的东西 就是用VB编写一个单击按钮,程序就显示一行字
除了以上的那段代码,还需要哪些?(我已经有模块了,还要DLL吗?)
请尽量详细 谢谢 学习,帮顶说真的,看不懂你想问什么!你写的代码不用,重新说明你想要的…不明白,帮顶clsASM  里面是怎么写的?
值直接写在类里面了?


这是代码
Sub Call_Text()
Dim asm As New clsASM  '这个已近定义
With asm                            '  asm
    .Pushad                        '  pushad
    .Mov_EAX &H5A1F70              '  Mov EAX,&H5A2170
    .Call_EAX                      '  call pointer(eax)
    .Popad                          '  popad
    .Ret
End With                            '  end
asm.Run_ASM pid
End Sub
我想用CALL做一个简单的东西 就是用VB编写一个单击按钮,程序就显示一行字
除了以上的那段代码,还需要哪些?(我已经有模块了,还要DLL吗?)
请尽量详细 谢谢 学习,帮顶说真的,看不懂你想问什么!你写的代码不用,重新说明你想要的…不明白,帮顶clsASM  里面是怎么写的?
值直接写在类里面了?


此函数如何调用?
BOOL WINAPI GX_GetMonitorData(unsigned short* ChannelNo,unsigned char* IsFinish,unsigned char* pMonitorData,unsigned short*DataLen,unsigned short Len);

我的代码:
Declare Function GX_GetMonitorData Lib "GxMonitor.dll" (ByRef ChannelNo As Integer, ByRef IsFinish As Integer, ByRef pMonitorData As String, ByRef DataLen As Integer, ByVal Lens As Integer) As Boolean

Dim num As Integer
Dim IsFinish As Integer
Dim DataLen As Integer
Dim cMonitorData As String * 4000

GX_GetMonitorData(num, IsFinish, cMonitorData, DataLen, 65535)


此函数如何调用?
BOOL WINAPI GX_GetMonitorData(unsigned short* ChannelNo,unsigned char* IsFinish,unsigned char* pMonitorData,unsigned short*DataLen,unsigned short Len);

我的代码:
Declare Function GX_GetMonitorData Lib "GxMonitor.dll" (ByRef ChannelNo As Integer, ByRef IsFinish As Integer, ByRef pMonitorData As String, ByRef DataLen As Integer, ByVal Lens As Integer) As Boolean

Dim num As Integer
Dim IsFinish As Integer
Dim DataLen As Integer
Dim cMonitorData As String * 4000

GX_GetMonitorData(num, IsFinish, cMonitorData, DataLen, 65535)


    最近喜欢用电脑看小说了!不过用鼠标点来点去麻烦,网上基本上又没什么好的自动阅读器。正好最近学了VB,我就想能不能用VB编写一个自动阅读器:

        ①可以把txt文本直接导入阅读器的文本框内(用其它方法也行);
        ②用户可以设置它每行显示的字数和滚动的速度,然后让它自动由下至上滚动阅读!!

        如果,用户可以设置字体、字体颜色、字体大小和背景颜色,那就更好了!

  高手恳请指点,指点!!还有就是,它还有书签功能!lz说的功能ReadBook都有,下个就行了。
要自己做建议用richtext控件<


我对vb完完全全是个初学者,现在想做个小程序
程序只有输入框和确认框,在输入框输入串数字,按确认,就能更新数据库中一个表中的一列值,我想请问下这样的程序要是用vs2005怎么写?还是先看看本入门书吧。数据库操作 vs2005

google sqlhelper 百度
帮顶VS2005,你不用写,把需要的控件拖上来,设置好就行了。我的是VS2008…要不我都帮你写了<


主要是程序文字中要插入图片、公式等
使用word里的Document控件的话,要双击输入,反应太慢,还会弄一排菜单出来……..
RichTextBox控件效果不错,也支持插入图片等,唯一可惜的是不支持文字和公式混排时的居中对齐(在WORD里随便输2个字和一幅图,右键——段落——中文版式——对齐方式那选“居中”,你就知道了),和平常的习惯不一样
有更好的办法没有?

谢谢您的指导和关注!

引用 1 楼 xxyj6450 的回复:
可以居中吧?

不好意思,刚才上课去了
不能的,我试过了,在WORD里排好,粘贴进去就又还原了!

自己顶一下

不懂,路过


有一个关于C++, Dll, 和VB的简单问题困扰着我很久,但是由于不是很了解VB,所以提出这个问题。但是不知道在这个版面提出这个问题是否合适,但是我确实找不到一个更加合适的版面发布了。
项目需要编写一个基于C++的Dll,提供给其他工程调用,这些工程包括VB和C++。在Dll中实现一些对文件的基本操作,初步设想建立几个基本对象。如果不支持Vb工程调用的话,直接输出工具类即可。不知道VB工程如何声明在这个Dll中定义的工具类?

还要注意一些调用的约定,比如标准约定还是用C约定

在DLL中適當的宣告輸入函式樣式, 是可以被其他工程調用的…
extern "C" __declspec(dllexport) bool  __stdcall GetPlugInModuleClassName(char * cPlugInModuleCalssName);
Declare Function GetPlugInModuleClassName Lib "../testdll_library.dll" (ByVal() t As Byte) As Boolean

感谢VCRWX和jame2001,你们提示注意的问题,我也清楚。可能是我没有把问题陈述清楚,我举一个例子。
我自定义一个数据对象比如是CObject,然后在CUtilitly中实现一个函数SampleFunction,希望这个函数返回指针(CObject㗯𜉯𜌨🙦෧𚄥晦𓕥𐈩¥𐗯𜟨㽥𐦨⫖B工程调用,如何调用?

谢谢!

COM

应为现在要写的Dll要求支持windows和linux,所以放弃使用COM

BTW,COM在windows和linux上调用,假设在拥有源代码的情况下,是不是只需要在linux上重新编译就ok了?

无论是dll还是com、cobra,接口都需要使用纯C接口。

引用 8 楼 taodm 的回复:
无论是dll还是com、cobra,接口都需要使用纯C接口

纯C接口?不是很明白,能具体解释一下吗?自定义数据类型不是纯C的语法吗(弱弱的问)?

请问VB高手,在Dll中定义的数据类型,做为函数的返回值,如何在VB工程中声明,调用?

是不是问题太简单了,各位高人都不关注啊!

在 VC++ 中写一个标准的 DLL 是很方便的。

创建新工程,选 MFCAppWizard(dll),起一个工程名(DLL 文件名),选择保存路径,缺省选择 Win32 平台。
在下一屏上,缺省选 Regular DLL using shared MFC DLL 和 Yes, please. 确定

在 IDE 界面上,打开 文件名.cpp 文件,添加你的函数。注意,所有要导出的函数均加上 __stdcall.

不需要采用导出语句,在 文件名.def 文件中列出你的导出函数名即可。

EXPORTS
    ; Explicit exports can go here

函数名1 @1
函数名2 @2
……

编译后,就可以在 VB 中调用了。

引用 12 楼 of123 的回复:

在 VC++ 中写一个标准的 DLL 是很方便的。

创建新工程,选 MFCAppWizard(dll),起一个工程名(DLL 文件名),选择保存路径,缺省选择 Win32 平台。
在下一屏上,缺省选 Regular DLL using shared MFC DLL 和 Yes, please. 确定

在 IDE 界面上,打开 文件名.cpp 文件,添加你的函数。注意,所有要导出的函数均加上 __stdcall.

不需要采用导出语句,在 文件名.def 文件中列出你的导出函数名即可。

EXPORTS

我关注的是如果是自定义的数据类型,如何在VB中声明和调用?

引用 13 楼 thinkoversky 的回复:
引用 12 楼 of123 的回复:

在 VC++ 中写一个标准的 DLL 是很方便的。

创建新工程,选 MFCAppWizard(dll),起一个工程名(DLL 文件名),选择保存路径,缺省选择 Win32 平台。
在下一屏上,缺省选 Regular DLL using shared MFC DLL 和 Yes, please. 确定

在 IDE 界面上,打开 文件名.cpp 文件,添加你的函数。注意,所有要导出的函数均加上 __stdcall.

不需要采用导出语句,在 文件名.def 文件中列出你的导出函…


只要不是C++内部的对象,所有C++的标准数据类型都可以转换为VB的数据类型,包括结构。此外,还可以传递指针,在VB里可以使用CopyMemory进行存取。

比如__int64,在VB里就可以使用Currency相对应,或者使用DIM V(2) AS LONG,因为二者一样大小,但VB不能直接存取此变量,而是按高32位和低32位分解后,使用COPYMEMORY存取。

引用 14 楼 lyserver 的回复:
引用 13 楼 thinkoversky 的回复:
引用 12 楼 of123 的回复:

在 VC++ 中写一个标准的 DLL 是很方便的。

创建新工程,选 MFCAppWizard(dll),起一个工程名(DLL 文件名),选择保存路径,缺省选择 Win32 平台。
在下一屏上,缺省选 Regular DLL using shared MFC DLL 和 Yes, please. 确定

在 IDE 界面上,打开 文件名.cpp 文件,添加你的函数。注意,所有要导出的函数均加上 __stdcall.

不需要采用导出语句,…

比如自定义类型CUserDefinedObj,在工具类CUtility中输出接口Function(),其返回值是CUserDefinedObj㗯𜌥𜨖B中如何声明呢?希望详解!

引用 14 楼 lyserver 的回复:
引用 13 楼 thinkoversky 的回复:
引用 12 楼 of123 的回复:

在 VC++ 中写一个标准的 DLL 是很方便的。

创建新工程,选 MFCAppWizard(dll),起一个工程名(DLL 文件名),选择保存路径,缺省选择 Win32 平台。
在下一屏上,缺省选 Regular DLL using shared MFC DLL 和 Yes, please. 确定

在 IDE 界面上,打开 文件名.cpp 文件,添加你的函数。注意,所有要导出的函数均加上 __stdcall.

不需要采用导出语句,…

比如自定义类型CUserDefinedObj,在工具类CUtility中输出接口Function(),其返回值是CUserDefinedObj㗯𜌥𜨖B中如何声明呢?望详解!

是不是只需要将CUserDefinedObj重新在VB中声明一下,包括其中所有的函数接口就ok了?

不行,CUserDefinedObj是一个C++的类对象,如果真想在VB里访问,则用C++编一个ActiveX DLL,然后将CUserDefinedObj构造为一个相应的COM对象,再以COM方法和属性的方式暴露对象的变量和成员函数。

因为当前设计的Dll需要支持Linux,不知道ActiveX Dll是否可以在Linux上通信?

一般不能(尽管有wine之类的Windows仿真环境,不过没用过,所以不也乱说)。
既然要支持Linux,那么MFC和ActiveX都不能用了,只能用标准的C++编写标准的DLL,这样一来对Linux C没有问题,但VB里只能当作动态链接库进行使用,因此,不要直接显露C++对象,而是提供相关的函数和参数来操作和控制DLL里的对象,一句话,导出函数的参数尽量使用ANSI C的数据类型,包括指针和结构(不含成员函数),但不能使用类,甚至类指针,因为类指针对VB来说用途不大(基于COM接口的除外)。

引用 21 楼 lyserver 的回复:
一般不能(尽管有wine之类的Windows仿真环境,不过没用过,所以不也乱说)。
既然要支持Linux,那么MFC和ActiveX都不能用了,只能用标准的C++编写标准的DLL,这样一来对Linux C没有问题,但VB里只能当作动态链接库进行使用,因此,不要直接显露C++对象,而是提供相关的函数和参数来操作和控制DLL里的对象,一句话,导出函数的参数尽量使用ANSI C的数据类型,包括指针和结构(不含成员函数),但不能使用类,甚至类指针,因为类…

从你这里,我得到了确认的答案。那么有产生了新的问题,举个例子:
class CUserDefinedObject
{
……….
}

希望实现如下的工具函数
class CUtility
{
AddObject(const char* strId, CUserDefinedObject& result);
}

按照上述的讨论,这种接口设计(AddObject(const char* strId, CUserDefinedObject& result);)是实行不同的,但是我又想操作这个函数的结果,如何设计呢?


如何做到A网页,只能用自己编写的浏览器访问.
例如:
VB编写的浏览器访问A网页–>转向www.baidu.com
    其它浏览器访问A网页–>转向www.google.cn

A网页应该怎么写?
VB编写的浏览器要加入什么代码呢?

希望能够详细说明.


单位内网,与外网关闭,是用JAVA编写的,我试着找超级链接进行操作,可是找不到,找着的全是带JAVA字符的超级链接,想把图片一起发上来,可是不知图片怎么发,只好发几个源代吗:
网页源代码:(部分)
<script language="javascript">    这句应该是说使用的是java语言吧???

<frame name="left" scrolling="NO" noresize src=""/>
  <frameset rows="74,*,23" frameborder="NO" border="0" framespacing="0">
        <frame name="rootmenu" scrolling="NO" noresize src="/webroot/dbsy/rootmenu.do"/>
这是说的执行什么语句吧,后面的应该是子窗口的设置
  <frameset id="Child" cols="182,9,*" frameborder="NO" border="0" framespacing="0" rows="*">
    <frame name="childmenu" frameborder="NO" border="0" framespacing="0" scrolling="no" noresize src="/webroot/dbsy/childmenu.do"/>
    <frame name="menubar" frameborder="NO" border="0" framespacing="0" scrolling="no" noresize src="menu/MenuBar.jsp"/>
          <frame name="pagearea" frameborder="NO" border="0" framespacing="0" scrolling="yes" noresize src="/webroot/dbsy/viewpage.do"/>
      </frameset>
  <frame  name="bottom" scrolling="NO" noresize src="menu/Bottom.jsp"/>
</frameset>
<frame name="right" scrolling="NO" noresize src=""/>

部分我找的超级链接:http://pt.ds.hb/hb/sunfast/Js_Main?p_login=1&p_winId=20070913085505chenlin3后面的代码什么意思?

还有一链接上图片和文字都有,查找链接反映是二个:
  文字A… http://zg.ds.hb/webroot/enterapp.do?name=/dbsy&welcome=/webroot/dbsy/pages/index.jsp
  图片IMG… http://zg.ds.hb/webroot/unieap/images/newImg/dbsy.gif2  A… http://zg.ds.hb/webroot/enterapp.do?
大家说下,这又上什么意思?