vb.net无法引用C编写的dll怎么办?如果DLL不是voidvb.net你写voidvb.net的,且voidvb.net你要调用voidvb.net的函数不是__stdcall声明,VB直接调用是会报错的
如果DLL是你写的,注意调用约定问题,并看以下代码
***************************************************
以下是DLL代码
.cpp里这么写
1extern "C"__declspec(dllexport) void __stdcall HelloWorld()
2{3MessageBox(NULL,"HelloWorld","HelloWorld",NULL);4}
.def里这么写
LIBRARY"XXXX"
EXPORTS
; 此处以下添加
HelloWorld@1
*************************************************
vb里这么写
1 Public Declare Sub HelloWorld Lib "XXXX.dll" ()
然后调用就可以voidvb.net了,上面是VB的代码,或许VB.net的也差不多
VSTO开发的Outlook插件怎么部署到客户端机器上首先我要说插件(Add-in)
插件般现程序扩展微软Office系统公套接口便让发员基于些接口实现Office应用程序增强接口准确说Extensibility.IDTExtensibility2.
除Office应用程序都支持类似扩展机制例IE及Visual Studio本身都支持定程序扩展
其我要说前发插件Add-in
发Office插件(Add-in)途径各种各我致总结三类:
VBA 发:基于Visaul Basic for Application套发模型做些定制种定制限制比较些发难度相说更加低些做VBA发朋友都知道VBA脱离应用程序本身例ExcelVBA编辑器图所示
VC,Visual Basic发:种发式允许我VC,或者VB 6直接实现Extensibility.IDTExtensibility2套接口并且更加灵做更加强些定制目前Office应用程序默认安装些插件都种式做例图我Outlook默认安装些插件列表
【备注】早前我用VB 6做面发现基本连VB 6安装程序都找所截图其实项目模板实现接口发种插件关键于Office本身内部些象模型熟悉
VSTO发:所谓VSTO全称Visual Studio Tools for Office.我记VS 2003始提供VSTO 1.0简言允许.NET发环境发Office应用程序或者插件种式着显易见处能力增强用.NET整套框架VSTO发展现几版本别
VS 2003: VSTO 1.0
VS 2005: VSTO 2.0
VS 2008: VSTO 3.0
VS 2010: VSTO 4.0
VSTO 前版本些太部署要看部署环节曾经花精力写插件各式各部署问题导致没办顺利发给用户种觉让沮丧VSTO解决案相些环境依赖另外需要提升.NET安全策略等等
消息现新版本发部署相更加容易发面模板更加用提供Ribbon内置支持部署面我通ClickOnce技术发布网站或者打包vsto压缩包文件容易进行部署本文我用简单例进行说明
我看看新版发工具何快速高效发插件(Add-in)
作演示我主要侧重于发部署流程我要实现插件其场景比较简单:
我需要Outlook添加新Ribbon按钮该按钮点击弹窗口允许我Excel文件导入联系
让我始吧
第步:创建Add-in项目
项目模板自创建面项目结构
【备注】ThisAddin类便访问Outlook前实例要使用代码即
this.Application
第二步:添加Ribbon
我需要Outlook添加新Ribbon按钮事实容易做
我选择Ribbon(Visual Designer)视化界面设计
我首先需要设置Ribbon要显示图我RibbonType修改Microsoft.Outlook.Explorer意思说我Ribbon现Outlook默认管理器窗口
接我添加按钮group1工具箱用控件
【关于voidvb.net的信息】我做Ribbon看起像面
第三步:实现简单逻辑
接我按钮实现简单逻辑
通双击该按钮产事件处理器
我简单实现代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Office.Tools.Ribbon;
using System.Windows.Forms;
namespace OutlookAddInSample
{
public partial class MyRibbon
{
private void MyRibbon_Load(object sender, RibbonUIEventArgs e)
{
}
private void btImport_Click(object sender, RibbonControlEventArgs e)
{
Form form = new Form()
{
Text = "Import Contacts from Excel File",
StartPosition=FormStartPosition.CenterScreen
};
form.Show();
}
}
}
第四步:调试
完操作简单Add-in做何进行调试呢
没错直接按F5进行调试Outlook自打我Ribbon确实能看
点击该按钮我确实看窗口显示
同我Outlook选项框能看插件信息
第五步:发布
我本机做调试何发给用户呢前我般制作MSI安装程序现依做我今主要介绍种更加便部署式通ClickOnce技术发布网站或者文件夹
【注意】location面几种我保持默认选择直接发布文件夹
发布没遇错误面目录
我般目录打包给用户即
第六步:安装
接用户拿些文件应该何安装使用呢其实简单双击setup.exe或者设置直接双击vsto文件
般情况提示
点击install
我再打Outlook仍看Add-in及所添加Ribbon
第七步:卸载
用户需要卸载插件应该做呢
Programs and Features窗口找插件点击Uninstall即
VB.NET中的模块 在C#中有 静态类 的概念 自然里边全部的方法都是静态的 这意味着你可以直接通过 类名 方法名 去调用(例如System的Math类就是典型) 在VB NET中 没有 静态类 的概念(当然你可以用 单例模式 把构造函数弄成Private的方式 其它方法都是静态的)如果某些方法需要被其它地方频繁使用 可以创建 模块 在VB NET中一旦创建了模块 其中任何方法 属性或者变量都可以被其它地方引用 因此适合全局情况下频繁交互的情况(比如初始化加载的参数 可能后续程序要使用)等
现在问题在于 如果你把一个类似以下的模块代码封装成DLL类库 无论在C#或者是VB NET中都无法引用到其方法
Module A
Public Sub Test()
End Sub
End Module
或许你感到很奇怪——不是在VB NET中这样定义一个Module就直接可以使用其内部方法了么?为什么封装成类库就不可以了呢?上网问了一些人 众说纷纭 后来我在他人协助下终于成功解决了这个问题——解决方法很简单——只要在Module前加Public
理由是 为了兼容C# VB NET由Module封装成类库中这个模块不再是 模块 而是一个标准的类了 如果这样写 那么在 NET中被理解成(C#)
internal A
{
public void Test()
{
}
}
整个模块变成Internal的了!当然你到其它程序集中去引用就引用不到!而把类库中的Module的修饰符改为Public就可以了 这就是MSDN那位友人给我最好的提示
虽然这个提示不是令我太满意(因为要知道VB NET中可以直接不通过 类名 方式直接使用方法名) 但是这给了我很大的暗示 得出重要的结论
)VB NET中Module在制作成类库时候等同于VB NET中的类的规则(里边的方法都是静态的) 默认情况下是Friend(C#是internal)
)根据结论 那么我们知道引用该DLL类库的方法一定是 i)引用命名空间ii)C#中直接 类名 方法名 对于VB NET 直接可以引用到方法名
lishixinzhi/Article/program/net/201311/12502
vb.net中是否有静态类可以实现,类里面的字段或者方法加Shared
Public Class Form1
'下面实现静态类
Public Class test
Shared Sub New()
End Sub
Public Shared Sub run()
MsgBox("测试run")
End Sub
End Class
'下面测试
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'并没有实例化一个类哦
test.run()
End Sub
End Class
vb.net如何让两个窗体并发运行Imports System.Threading
Public Class Form1
Dim t1, t2 As Thread
Dim tt1
Private Delegate Sub voiddelegate(ByVal i As Integer)
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Form2.Show()
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
t1 = New Thread(AddressOf test)
tt1 = 1
t1.Start()
tt1 = 2
t2 = New Thread(AddressOf test)
t2.Start()
' Timer1.Start()
End Sub
Private Sub updateui(ByVal i As Integer)
Form2.Label1.Text = i.ToString
Form2.Label2.Text = i.ToString
End Sub
'把循环放到线程中运行会好一些,其实主要事务是对窗体控件的操作时多线程意义不大,因为访问窗体的代码依然要在窗体线程中运行 。
Private Sub test()
Dim d As voiddelegate = AddressOf updateui
For i = 0 To 9000
Me.Invoke(d, i)
Next
End Sub
'如果放在计时器中运行效果好的多
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Static i As Integer = 0
i= 1
If i9000 Then Timer1.Stop() : i = 0
Form2.Label1.Text = i.ToString
Form2.Label2.Text = i.ToString
End Sub
End Class
'如果在另一线程中用Application.run 打开窗体确实能行,不过窗体间相互操作不起作用,这个尚待研究中 。
vb.net中的事件函数,怎样为(sender,e)中的e增加自定义的参数?继承button,然后增加事件
并且自定义EventArg
思路:
class MyEventArg :EventArg
{
public long MyNum
{
set{ myNum = value;}
get{ return myNum; }
}
private long myNum ;
}
class MyButton:System.Windows.Forms.Button
{
public delegate void MyClick(object sender,MyEventArg e);
public event MyClick OnMyClick;
private MyEventArg myE = new MyEventarg();
protected override void OnClick(EventArgs e)
{
if(OnMyClick != null)
{
OnMyClick(null,myE);
}
base.OnClick(e);
}
}
voidvb.net的介绍就聊到这里吧,感谢你花时间阅读本站内容 , 更多关于、voidvb.net的信息别忘了在本站进行查找喔 。
推荐阅读
- 鸿蒙系统界面图片怎么添加,鸿蒙系统添加桌面图片
- 主播琪琪用的什么直播,主播琪琪用的什么直播号
- chatgpt网很差,chatpartner网络错误
- php数据储存 php储存数据的方法
- 什么cpu办公最快,什么cpu办公最快
- 长大了会发什么视频呢,长大发的文案
- 美甲工具直播间直播,美甲直播需要什么设备
- 解压tbz命令linux的简单介绍
- ios电脑刷系统,window刷苹果系统