Tag: c ++

使用Reflection.Emit覆盖属性定义

我正在尝试使用Reflection.Emit(TypeBuilder)实现此模式: public class ClassToBeProxied { public virtual object Property1 { get; set; } } public class Proxy : ClassToBeProxied { [AttributeToBeAdded] public override object Property1 { get { //do something else to return the object – ie get it from the database return null; //stub } set { //do something else to set the object […]

使用COM互操作从BS ++到C#编组BSTR

我有一个用C ++编写的进程外COM服务器,它由一些C#客户端代码调用。 其中一个服务器接口上的方法将大型BSTR返回给客户端,我怀疑这会导致内存泄漏。 该代码有效,但我正在寻找有关编组BSTR的帮助。 简化一下,服务器方法的IDL是 HRESULT ProcessRequest([in] BSTR request, [out] BSTR* pResponse); 并且实现如下: HRESULT MyClass::ProcessRequest(BSTR request, BSTR* pResponse) { USES_CONVERSION; char* pszRequest = OLE2A(request); char* pszResponse = BuildResponse(pszRequest); delete pszRequest; *pResponse = A2BSTR(pszResponse); delete pszResponse; return S_OK; } A2BSTR在内部使用SysAllocStringLen()分配BSTR。 在C#客户端中,我只需执行以下操作: string request = “something”; string response = “”; myserver.ProcessRequest(request, out response); DoSomething(response); 这样做,因为请求字符串被发送到COM服务器并且正确的响应字符串被返回给C#客户端。 但是每次往返服务器都会泄漏服务器进程中的内存。 crt泄漏检测支持显示crt堆上没有重大泄漏,所以我怀疑泄漏是用IMalloc分配的。 […]

如何在Windows商店(WinRT)应用程序中启用DocumentsLibraryfunction?

我刚刚在Visual Studio中创建了一个新的空白XAML / C#Windowsapp store应用。 我尝试使用以下代码在Documents文件夹中创建一个文件: // DEBUG ONLY: StorageFile file = await KnownFolders.DocumentsLibrary.CreateFileAsync(“Hey lol.txt”); 但它抛出了这个exception(我预期): WinRT信息:访问指定位置(DocumentsLibrary)需要在清单中声明一种function。 哪个好。 我期待它。 所以我去Package.appxmanifest并转到Capabilities选项卡,令我惊讶的是,没有列出“DocumentsLibrary”function。 如果它不存在,我如何启用它?

PCWSTR与LPWSTR

这是我的理解(如果我错了,请纠正我),它们之间的唯一区别是字符串是否可能被被调用函数修改。 ( PCWSTR , LPWSTR ) 我现在正试图将一个字符串从C#传递给一个期望PCWSTR的函数,但我能找到的只是[MarshalAs(UnmanagedType.LPWStr)] 。 我纠正那没关系吗? (是的,它有效 。但是,这并不能certificate它没问题。有些东西可以工作,但会导致内存泄漏等)

DirectorySearcher FindOne()在初始执行时延迟

我在执行DirectorySearcher FindOne()和我看到的第一个网络数据包之间的初始延迟时间为2-5秒。 初始执​​行后,后续执行立即完成约45秒。 在快速执行的那段时间之后,下一次执行将被延迟,并且所有后续执行将立即完成。 似乎有某种缓存正在进行,但我无法找到任何确认或描述导致初始延迟的资源。 我们在客户端Windows 2008服务器上注意到了这一点,然后在我们自己的Windows 2008和Windows 7盒子上重现。 这是我简单的.NET 4.0 C#应用程序的样子。 延迟发生在“已启动”和“已完成”消息之间。 知道为什么这个延迟发生在最初的FindOne()执行上? 任何帮助深表感谢! using System; using System.Collections.Generic; using System.Text; using System.DirectoryServices; namespace LdapTest { class Program { static void Main(string[] args) { string[] fetchAttributes; fetchAttributes = new string[] { “{string[0]}” }; using (DirectoryEntry searchRoot = new DirectoryEntry(“LDAP://localserver/ou=lab,dc=ourdomain,dc=com”, “cn=binduser,ou=Services,dc=ourdomain,dc=com”, “Password”, AuthenticationTypes.ReadonlyServer)) { using (DirectorySearcher […]

C#REST客户端使用POST发送数据

我正在尝试向REST Web服务发送一个简单的POST请求并打印响应(代码如下,主要来自Yahoo!开发人员文档和一些文档提供的MSDN代码片段)。 我希望客户发送: 请求方法:POST(即我希望PHP中的$ _SERVER [‘REQUEST_METHOD’] ==’POST’) 数据:foo = bar(即PHP中的$ _POST [‘foo’] ==’bar’) 但是,它似乎在发送: 请求方法:FOO = BARPOST 数据:(空白) 我知道API是有效的,因为我已经用Python和PHP编写的客户端进行了测试,所以我很确定它一定是我的C#的问题。 我不是一个交易的.NET程序员,所以会很感激任何关于如何弄清楚问题是什么的评论/指示 – 我确信它是微不足道的但是我自己无法发现它。 uri,用户和密码变量在代码中设置得更早 – 它们可以正常使用GET请求。 request = (HttpWebRequest) WebRequest.Create(uri); request.Credentials = new NetworkCredential(user, password); request.Method = WebRequestMethods.Http.Post; request.ContentType = “application/x-www-form-urlencoded”; string postData = “foo=bar”; request.ContentLength = postData.Length; StreamWriter postStream = new StreamWriter(request.GetRequestStream(), System.Text.Encoding.ASCII); postStream.Write(postData); postStream.Close(); […]

Windows Mobile应用程序中DataGrid的列宽

我在尝试调整数据网格列的宽度时遇到问题。 我使用了这里发布的答案,但我无法解决。 我正在使用对象列表作为数据源。 在这个简单的例子中,我刚刚创建了一个智能设备应用程序,并且刚刚添加了一个数据网格。 然后我的代码就是这个: public Form1() { InitializeComponent(); List lista = new List(); lista.Add(new Prueba(“uno”, “dos”)); lista.Add(new Prueba(“tres”, “cuatro”)); dataGrid1.DataSource = lista; DataGridTableStyle tableStyle = new DataGridTableStyle(); tableStyle.MappingName = lista.GetType().ToString(); DataGridTextBoxColumn tbcName = new DataGridTextBoxColumn(); tbcName.Width = 4000; tbcName.MappingName = “UNO”; tbcName.HeaderText = “UNO”; tableStyle.GridColumnStyles.Add(tbcName); dataGrid1.TableStyles.Clear(); dataGrid1.TableStyles.Add(tableStyle); } } public class Prueba { public […]

将Windows服务作为“本地系统”运行有哪些安全风险?

我编写了一个运行为“本地系统”的.NET Windows服务。 最近我读到,作为本地系统运行可能会向黑客公开系统凭证,使他们能够接管系统。 涉及的风险是什么?当我作为本地系统运行服务时,如何防止它们。

在C#项目中使用C ++ DLL

我有一个C ++ DLL,它必须集成在一个C#项目中。 我想我找到了正确的方法,但是调用dll会给我这个错误:System.BadImageFormatException:试图加载一个格式不正确的程序。 (HRESULTexception:0x8007000B) 这是dll中的函数: extern long FAR PASCAL convert (LPSTR filename); 这是我在C#中使用的代码 namespace Test{ public partial class Form1 : Form { [DllImport(“convert.dll”, SetLastError = true)] static extern Int32 convert([MarshalAs(UnmanagedType.LPStr)] string filename); private void button1_Click(object sender, EventArgs e) { // generate textfile string filename = “testfile.txt”; StreamWriter sw = new StreamWriter(filename); sw.WriteLine(“line1”); sw.WriteLine(“line2”); sw.Close(); […]

WCF Web服务调用 – 要捕获的exception?

我有一个调用外部Web服务的程序,我想向用户提供一个友好的对话框,例如服务器关闭,有人切断电缆等。假设以下代码 try { client.MyWebService() } catch(? ex) { // display friendly dialog explaining what went wrong } 我应该在代码中用什么例外代替问号? 当一切工作顺利并且我无法控制外部部件时,很难真正测试这样的情况,因此有些见解会受到赞赏。 谢谢!