我开发了一个使用共享内存的Windows应用程序---即内存映射文件,用于进程间通信.我有一个Windows服务,它执行一些处理并定期将数据写入内存映射文件.我有一个单独的Windows应用程序,它从内存映射文件中读取并显示信息.该应用程序在Windows XP,XP Pro和Server 2003上按预期工作,但不在Vista上.
我可以看到写入内存映射文件的数据是由Windows服务正确发生的,因为我可以使用文本编辑器打开文件并查看存储的消息,但"消费者"应用程序无法从文件中读取.这里需要注意的一件有趣的事情是,如果我关闭使用者应用程序并重新启动它,它会消耗先前写入内存映射文件的消息.
另外,另一个奇怪的事情是当我使用远程桌面连接到Windows主机并通过远程桌面调用/使用消费者应用程序时,我得到相同的行为.但是,如果我调用远程桌面并使用以下命令连接到目标主机的控制台会话:mstsc -v:servername /F -console,一切正常.
这就是为什么我认为问题与权限有关.任何人都可以评论这个吗?
编辑:
我用来创建内存映射文件的ACL和同步访问的Mutex对象如下:
TCHAR * szSD = TEXT("D:")
TEXT("(A;;RPWPCCDCLCSWRCWDWOGAFA;;;S-1-1-0)")
TEXT("(A;;GA;;;BG)")
TEXT("(A;;GA;;;AN)")
TEXT("(A;;GA;;;AU)")
TEXT("(A;;GA;;;LS)")
TEXT("(A;;GA;;;RD)")
TEXT("(A;;GA;;;WD)")
TEXT("(A;;GA;;;BA)");
Run Code Online (Sandbox Code Playgroud)
我认为这可能是问题的一部分.
在VB.NET中,即使两个操作数都是整数,'/'运算符也会导致值浮动(如果结果是非整数).
所以我尝试使用'\'运算符产生整数值而不管操作数.
所以我认为'\'是整数除法
2.5\3结果0
现在我尝试了
1.5\2
我预计它会为0但它会导致1.
现在,这是一个错误还是正确的结果?
实际上是什么'''运算符?
如果它是一个错误,它通过VB6存在
我试图在谷歌搜索这个,但该+=部分被忽略.
所以我想在变量中添加一些文本:
Text := 'asdf';
Text := Text + 'ghijk';
Run Code Online (Sandbox Code Playgroud)
这工作正常,但对于更长的变量名称,这样的东西会很好:
Text := 'asdf';
Text += 'ghijk';
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我使用的是Gmail的API,基本上我想连接到我的Gmail帐户阅读我的邮件,收件箱类别,并获取每个邮件的基本信息(标题/主题,从,到,日期和发送者).
我正在尝试根据自己的需要调整这个用C#编写的Google示例,我正在寻找C#或Vb.Net的解决方案,无论如何.
(请注意,Google会针对不同的用户所示国家/地区显示不同的代码示例,因此该网页的代码可能与每个网站的代码相同,而Google的逻辑确实非常糟糕.)
我在下面的代码中遇到的问题是:
lblInbox.MessagesTotal财产上得到一个空值.msgItem.Raw 财产也总是空的.这就是我尝试过的,请注意,在调整Google的示例时,我认为该"user"参数应该是Gmail用户帐户名("MyEmail@GMail.com"),但我不确定它应该是那样.
Imports System.Collections.Generic
Imports System.IO
Imports System.Linq
Imports System.Text
Imports System.Threading
Imports System.Threading.Tasks
Imports Google.Apis.Auth.OAuth2
Imports Google.Apis.Services
Imports Google.Apis.Util.Store
Imports Google.Apis.Gmail
Imports Google.Apis.Gmail.v1
Imports Google.Apis.Gmail.v1.Data
Imports Google.Apis.Gmail.v1.UsersResource
Public Class Form1 : Inherits Form
Private Async Sub Test() Handles MyBase.Shown
Await GmailTest()
End Sub
Public Async Function GmailTest() As Task
Dim credential As …Run Code Online (Sandbox Code Playgroud) 我的问题很简单
VB.dll(VB5.0我猜)包括这些方法
Private Declare Function ffr_device_find Lib ".\ffr_32.dll" () As Boolean
Private Declare Function ffr_data_transceive_ex Lib ".\ffr_32.dll" (ByVal sp_sdata As String, ByVal sp_rdata As String) As Boolean
Run Code Online (Sandbox Code Playgroud)
在C#....(.NET 4.5)
[DllImport("FFR_32.dll", CallingConvention = CallingConvention.Cdecl)]
extern public static Boolean ffr_device_find();
[DllImport("FFR_32.dll", CallingConvention = CallingConvention.Cdecl)]
extern public static void ffr_data_transceive_ex([Out] string sp_sdata, [Out] string sp_rdata);
// FYI, I tried [Out], out, and ref but to no avail.
Run Code Online (Sandbox Code Playgroud)
第一个效果很好,
但第二个溢出了这个错误.
对PInvoke函数'ffr_data_transceive_ex'的调用使堆栈失衡.
这很可能是因为托管PInvoke签名与非托管目标签名不匹配.检查PInvoke签名的调用约定和参数是否与目标非托管签名匹配.
FYI
这是来自VB的工作代码...(不是内部DLL源)
Dim st As String
Dim …Run Code Online (Sandbox Code Playgroud) 如果一个对象数组被声明为Variant类型(以便轻松检查它是否使用IsEmpty函数初始化),那么,如果随后定义的数组的元素被引用为With语句的对象表达式(例如With VariantObjArray(i) ...),那么对象变量数组元素将被错误地释放(尽管With语句的对象变量的隐式副本将在单个后续执行过程中正确运行 - 通过With语句的范围)。此外,数组元素对象变量的错误释放可能是内存泄漏,因为它是在执行 With 表达式时立即发生的,而不是任何标准释放机制(例如退出With语句或从子例程返回)的结果或明确设置为 Nothing。
Sub DemoVariantObjArrayBug()
Dim i As Integer
Dim NextWkSh As Worksheet
Static VariantObjArray As Variant
If IsEmpty(VariantObjArray) Then 'Check to avoid unnecessary re-allocation of static or global array variable
ReDim VariantObjArray(1 To ThisWorkbook.Worksheets.Count)
For Each NextWkSh In ThisWorkbook.Worksheets
i = i + 1: Set VariantObjArray(i) = ThisWorkbook.Worksheets(i)
Next NextWkSh
End If
Stop 'and, to observe the bug, open the Locals …Run Code Online (Sandbox Code Playgroud) 我刚刚被要求记录一个人完成了10年的VB6开发.自从我自己查看VB6代码已经有一段时间了,所以我基本上想知道是否有人有任何关于如何最好地解决它的提示.
是否有任何好的软件,无论是否免费,哪些类似于VB6的javadoc,这可能会有所帮助?
或者,如果有人对如何执行此操作的工具/方法有任何建议.任何提示将不胜感激.
如何做一个继续在XSLT for-each(不退出for-each,而是继续了for-each?
喜欢:
<xsl:for-each select="asd">
<xsl:if test="$test1">
<!--some stuff-->
<xsl:if test="$test1A">
<!--CONTINUE()-->
</xsl:if>
</xsl:if>
<xsl:if test="$test2">
<!--some stuff-->
<!--CONTINUE()-->
</xsl:if>
<!--main stuff-->
</xsl:for-each>
Run Code Online (Sandbox Code Playgroud) 正如标题所要求的那样,
这个+标志意味着<script type="text/javascript+protovis">什么?
有什么好材料吗?
编辑:我知道 C# 相当于For Each server As String In serversis foreach(var item in servers),但由于GetOPCServers返回对象,因此应该将其转换为可迭代类型。
我正在使用 COM 库开发一个应用程序。由于64位会出现问题,所以我的目标CPU是x86。
\n所有方法都按预期工作,除了GetOPCServers().
尽管使用相同 dll 的 Visual Basic 代码不会导致问题,但 C# 会抛出System.InvalidCastException以下错误:
\n\nSystem.Core.dll 中发生了类型为“System.InvalidCastException”的第一次机会异常
\n附加信息:
\n
\n\'System.String[*]\' t\xc3\xbcr\xc3\xbcndeki nesne \'System.String[]\' t\xc3\xbcr\xc3\xbcne at\xc4\xb1lamad\xc4 \xb1.
由于我的操作系统是土耳其语,因此对错误消息表示歉意。
\n\n\ntype 中的对象
\nSystem.String[*]不能赋值给System.String[]
System.String[*]和 和有什么区别System.String[]?
使用相同dll的VB代码运行没有异常
\nPublic Class OpcInfo\n Dim servers As …Run Code Online (Sandbox Code Playgroud)