我开发了一个使用共享内存的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)
我认为这可能是问题的一部分.
我有一个简单的街景工作,给我一个给出地址的街景:
var geocoder = new google.maps.Geocoder();
var address = "344 Laguna Dr, Milpitas, CA 95035";
geocoder.geocode( { 'address': address},
function(results, status) {
//alert (results);
if (status == google.maps.GeocoderStatus.OK) {
//alert(results[0].geometry.location);
myStreetView = new google.maps.StreetViewPanorama(document.getElementById("map_canvas"));
myStreetView.setPosition(results[0].geometry.location);
var marker = new google.maps.Marker({
position: results[0].geometry.location,
map: myStreetView,
title:address
});
//alert ("yay");
} else {
alert("Geocode was not successful for the following reason: " + status);
}
});
Run Code Online (Sandbox Code Playgroud)
如您所见,我在街景视图中添加了地址标记.我的问题是,街景指向北方,标记位于南方.对于非特定地址,如何指定街景视图应指向地址的标记而不是默认指向北?
google-maps google-maps-api-3 google-maps-markers google-street-view
在VB.NET中,即使两个操作数都是整数,'/'运算符也会导致值浮动(如果结果是非整数).
所以我尝试使用'\'运算符产生整数值而不管操作数.
所以我认为'\'是整数除法
2.5\3结果0
现在我尝试了
1.5\2
我预计它会为0但它会导致1.
现在,这是一个错误还是正确的结果?
实际上是什么'''运算符?
如果它是一个错误,它通过VB6存在
我在报表设计器中有这样的表格:
Category: 1 2 3 4 Total
Max Amount: x y z c ?
Run Code Online (Sandbox Code Playgroud)
我需要得到Max Amount的总和,但是表达式不会让我取Sum(Max(amount)),并且对这个单元格禁用add total.
最大金额行是一个表达式,它取每个类别的最大值.源数据有重复的值,所以我只取最大值.例如:
Category Amount
1 4.6
1 4.6
1 4.6
2 5
3 4
Run Code Online (Sandbox Code Playgroud)
表中的其他列是不同的,但数量将是相同的,所以我不仅可以选择不同的值.
我有以下数组:
double[] list = new double[] {0,0,100,100}
Run Code Online (Sandbox Code Playgroud)
为什么我要搜索29.6我-3?
Array.BinarySearch(list, 29.6)
Run Code Online (Sandbox Code Playgroud)
我期待+1或-1.
返回参数的Array.BinarySearch()文档说:
如果找到值,则指定数组中指定值的索引.如果未找到值且值小于数组中的一个或多个元素,则为负数,它是第一个元素的索引的按位补码,其大于值.如果找不到值且值大于数组中的任何元素,则为负数,它是(最后一个元素的索引加1)的按位补码.
但这并没有对我说太多.
我创建了一个包含名为"koduj"的函数的DLL.通过在Excel工作表单元格中使用它来调用此函数将返回所需的结果.从VBA调用"koduj"会返回错误的答案.
koduj需要两个参数:string nr_id和integer x1.它nr_id以ASCII表示形式计算字母的总和并添加x1.计算的总和不是返回的.
我按照这里的说明进行操作.
这是我的.cpp源文件:
#include<Windows.h>
#include<string>
using namespace std;
//Convert BSTR to wstring for convenience
wstring BSTR_to_wstring (BSTR text){
return wstring(text, SysStringLen(text));
}
//Calculate sum of letters in ASCII representation
int ASCII_sum (wstring ws){
int sum = 0;
for (unsigned int i = 0; i < ws.length(); i++)
sum += ws[i];
return sum;
}
//"koduj" function
int _stdcall koduj (BSTR nr_id, int & x1){
wstring ws_nr_id = BSTR_to_wstring(nr_id); …Run Code Online (Sandbox Code Playgroud) Faulting application name: w3wp.exe, version: 7.5.7601.17514, time stamp: 0x4ce7a5f8 Faulting module name: clr.dll, version: 4.0.30319.18063, time stamp: 0x526767c6 Exception code: 0xc00000fd Fault offset: 0x0007717d Faulting process id: 0x1728 Faulting application start time: 0x01cf972772f04132 Faulting application path: C:\Windows\SysWOW64\inetsrv\w3wp.exe Faulting module path: C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll Report Id: b4d0c430-031a-11e4-a40f-0050569e40da
当我们的MSM模块加载器服务崩溃时,继续收到此错误?我们加载了Windows更新提供的修补程序,没有任何改进.
任何想法为什么?
我使用的是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)