Tag: vb6

如何告诉vb6每次创建dll时都不要创建新版本的interfaces / com对象?

我有.NET代码使用的vb6 com服务器(ActiveX DLL项目) 每次我将更改放入vb6代码并生成dll时,我也必须重新编译我的.NET客户端代码,因为它看起来像VB6为接口和com对象生成新的GUID或版本。 我承认这是一个很好的做法,因为进行了更改,但我想禁用此行为,以便每次更新我的vb6 dll时都让我的.NET客户端代码相同。 无论对COM对象或COM接口做了哪些更改,我怎么能告诉VB6保持ActiveX dll的所有GUID和版本都一样?

如何将数组(通过引用,在VB6中)传递给C \ C ++ * .dll子例程?

我需要将一个空的变量数组传递给用C编写的DLL(并且在所有Windows版本上都可用),并且C代码(我无法控制并且无法编辑)将填充变量空数组及其一些返回值值。 基本上,当我尝试这个时 – 当它应该包含函数/子调用的结果时,ByRef数组总是空的(如果我在.NET中执行完全相同的操作,它可以工作)。 我想我需要做一个自定义声明,所以VB知道如何调用C函数,或者? 以下是C子/函数的声明方式。 鉴于此,我需要做些什么才能确保C能够正确使用我的空数组并且我可以获得我的结果? HRESULT InvokeAction( [in] BSTR bstrActionName, [in] VARIANT varInActionArgs, [in, out] VARIANT *pvarOutActionArgs, [in, out] VARIANT *pvarRetVal ); 有关此function的更多信息: http : //msdn.microsoft.com/en-us/library/aa382237(VS.85).aspx 谢谢

压缩XML指标。

我有一个客户端服务器应用程序,它通过TCP / IP从客户端发送XML到服务器,然后广播到其他客户端。 我如何知道通过压缩XML而不是通过常规流发送来保证性能改进的XML的最小尺寸。 对此或示例有什么好的指标吗?

如何处理从VBA中的C#方法返回的字符串数组

我在C#中编写了一个返回字符串数组的程序集,C#代码如下: [ComVisible(true)] public class PostcodeFinder { public string[] SearchPostcodes(string postCode) { var searchService = new QuickAddress(“http://xxxx:xxxx/”) {Engine = QuickAddress.EngineTypes.Singleline, Flatten = true}; var mPicklist = searchService.Search(“GBR”, postCode, PromptSet.Types.OneLine); var x = mPicklist.Picklist.Items.Count(); var resultsToReturn = new string[x]; for (var i = 0; i < x; i++) { resultsToReturn[i] = mPicklist.Picklist.Items[i].PartialAddress; } return resultsToReturn; } } […]

WCF服务应用程序 – 使用C ++对象调用导致Visual Basic 6.0 DLL文件挂起

我们目前正在移动系统以使用WCF并遇到了一个我们无法弄清楚的问题。 设置是有一个C#DLL文件包装C ++和Visual Basic 6.0 DLL文件。 C#DLL文件具有这两者的包装器,并实例化这两个对象。 初始化C ++对象(从文件中抓取数据),然后将其传递给Visual Basic 6.0对象,该对象使用C ++对象中的数据运行报表。 这一切都是作为WCF服务应用程序发生的,并且在大多数情况下它工作得很好,但是当Visual Basic 6.0代码调用C ++对象中的方法时,整个事情就会挂起。 我只使用一个调用相同C#DLL文件(在WCF之外)的简单应用程序进行测试,并且它可以完美地工作。 因此,WCF和C ++ DLL文件有一些问题,但我们无法弄清楚是什么。 我已经将Visual Basic 6.0 DLL文件更改为使用Run Unattended和Store in Memory (以便能够使用它),但这似乎并不重要。 有没有人有这方面的经验,或者有任何想法为什么会挂? 我的想法是WCF服务以某种方式锁定DLL文件,这就是为什么当Visual Basic 6.0 DLL文件使用它时,它无法访问它,导致它死锁。 C ++ Wrapper public interface ISummaryWrapper { void LoadInfo(Application info); SummaryApp GetSummary(); } public class SummaryWrapper : ISummaryWrapper { private SummaryApp _summary; […]

在VB6应用程序中使用.NET dll

我在c#.net中写了一个dll,它在应用程序中调用了另一个第三方.NET dll。 当我用c#.NET编写的控制台应用程序测试它时,这也很好用,使用下面的代码: Assembly u = Assembly.LoadFrom(dllLocation); Type t = u.GetType(“MyLIB.CLass”); MethodInfo m = t.GetMethod(“Method”); object[] myparam = new object[1]; myparam[0] = fileLocation; result = (string)m.Invoke(null, myparam); 请注意,有些文件是在最初加载dll的位置加载的,使用: string path = Assembly.GetExecutingAssembly().Location; path = Path.GetDirectoryName(path); 但问题是,当我尝试使用VB6调用它时,我收到一个错误,它无法加载第三方DLL。 请帮忙,因为我似乎不知道发生了什么。

TlbImp.exe无法注册lib文件:“。dll不是有效的类型库”

.dll是FKAttend.dll附带生物识别设备的VB6.0 SDK。 .dll在VB6.0环境下工作正常。 但是,当尝试在具有VS.NET环境的另一台PC中注册它时,它会给出上述错误。 我们使用依赖性walker检查了.dll,它显示了以下错误。 如何在VS.Net环境中注册并使用此.dll?

究竟什么是“文件编号”?

我正在使用一些早先从VB6转换过来的C#代码,它会执行大量的文件IO。 到处都是我看到的: fn = VBNET.FileSystem.FreeFile(); …接下来是VBNET.FileSystem.FileOpen() ,一些文件IO,然后是VBNET.FileSystem.FileClose() 。 对FreeFile()的调用会生成一个“文件号”,这是打开文件所必需的。 但是什么是文件编号,如何在完成后将其释放回系统? http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.filesystem.freefile.aspx上的文档似乎没有说,但它确实说如果“超过255则会抛出exception文件正在使用中“,这对我来说意味着当我完成它们时释放它们是个好主意。 注意 – 我知道有更好的文件IO库可供使用,但这是我们一直坚持的,直到我们有资源重写这些东西,所以我只是想了解它。

C#中的DoEvents()实际上做了什么?

我们聘请了一家公司将一个控制某些工业机械的旧VB6 DLL转换为C#。 旧的VB6代码具有“暂停”例程,由睡眠调用和DoEvents组成,因此在hibernate时,DLL中的计时器和套接字事件仍将被处理。 DoEvents转换为 System.Windows.Forms.Application.DoEvents(); 我不是VB6程序员,但我的理解是VB6实际上是单线程的,因此长时间hibernate会关闭所有内容,包括计时器和套接字事件处理。 当代码转换为C#时,暂停例程看起来像这样。 。 。 public static void pauseit_ms(ref int milliseconds) { try { Sleep(milliseconds / 2); System.Windows.Forms.Application.DoEvents(); Sleep(milliseconds / 2); } catch (Exception exc) { LogException(“pauseit_ms”, exc); } } 在.Net中,计时器和套接字事件在它们自己的线程中运行(我在这个转换后的代码中的大部分工作都是试图使它成为线程安全的!)所以DoEvents()购买我们并不明显。 但是MSDN说 调用此方法会导致在处理所有等待窗口消息时挂起当前线程。 那么我们应该将这些DoEvents()保留在其他类型的事件(不是定时器或套接字回调)中吗? 或者它们在.Net / C#上下文中是多余的?

从二进制文件中读取变量大小的字符串(VB6与C#)

我有一个包含以下内容的二进制文件: 以下代码用于在旧的VB6程序中读取此内容: Private Type tpClient Firstname As String LastName As String Birth As String Adres As String Geslacht As String IDNummer As Long SSNummer As String DatabaseID As Long Telefoon1 As String Telefoon2 As String End Type Open strFilePath For Random Access Read As #intFileNumber Get #intFileNumber, 1, ClientData ‘ ClientData is of type tpClient […]