草庐IT

托管所

全部标签

c# - 如何将数据从托管程序集流式传输到 native 库并再次返回?

如何将数据(文本)从托管程序集流式传输到native库,然后将数据(文本)流式传输回托管程序集?具体来说,我想在.NET端公开某种类型的System.IO.Stream,以及(最重要的)FILE*在native端。本地方法的签名应该是:FILE*foo(FILE*bar);围绕原生p/invoke调用的包装器的签名应该是:CustomStreamfoo(CustomStreambar);我不想在native端使用回调方法(一种用于获取更多数据,一种用于设置更多数据)。我想在native端使用FILE*-以及对其进行操作的所有相关方法,例如fprintf。我不想要任何磁盘I/O。这需要在

c# - 如何通过引用修改该字符串的非托管 C 库来发送字符串?

我是与非托管库交互的新手。我有一个非托管C函数,它通过函数内的引用修改字符串。我在从C#传递字符串并通过C函数修改它时遇到问题。这是C函数:__declspec(dllexport)void__stdcallTest(char*name){*name="Bar";}这是C#DLL导入代码:[DllImport(@"C:/blah/mylibrary.dll")]publicexternstaticstringTest(stringname);这是我用来调用函数的代码:strings="foo";Test(s);//Iwantstobe"Bar"aftertheaboveline我曾尝试

c# - 如何从托管项目引用 native WinRT 组件?

据说您可以创建一个可以在C#中使用的C++WinRT组件。我有一个简单的测试项目-一个C#XAML应用程序和一个仅使用基本WinRT组件项目模板的C++项目。当我尝试在C#XAML项目中添加项目引用时,它说无法添加引用(不知道为什么)。我可以构建nativeWinRT组件,并生成一个.winmd文件,我可以使用添加引用对话框中的浏览按钮手动添加对此.winmd文件的引用。这允许我访问native库中的方法,但是当我构建时,它说它正在使用Platform.IDisposable,但该类型是在未引用的程序集中定义的。我还没有看到任何session演示这种情况。

c# - 防止对非托管代码中使用的托管引用进行垃圾回收

我的C#应用程序使用包装的C++代码进行计算。C++header:__declspec(dllexport)voidSetVolume(BYTE*data,unsignedintwidth);C++/CLI包装器:voidSetVolume(array^data,UInt32width){cli::pin_ptrpdata=&data[0];pal->SetVolume(pdata,width);}C#:publicstartCalc(){byte[]voxelArr=File.ReadAllBytes("Filtered.rec");palw.SetVolume(voxelArr,4

c# - 从托管 C++/CLI 使用 C# 扩展方法

如果我的术语有点不对,请原谅我。我对托管C++/CLI的了解非常有限。我有一个MFC应用程序,它使用启用了/clr选项的dll。此dll使用几个C#dll与使用WCF的服务器进行通信。在大多数情况下,这工作正常。在其中一个C#dll中,我向System.Net.IPAddress类添加了一个扩展方法,它将检索IPAddress对象的子网掩码(使用UnicastIPAddressInformation类及其IPv4Mask)。扩展方法在C#方面非常有效,但我不知道如何在托管C++/CLI代码中使用它。首先,这可能吗?如果是这样,托管C++/CLI端的语法是什么样的?我必须使用/clr:p

c# - 非托管 C# 代码是否编译成 IL 并在 CLR 上运行?

正在询问manuallymanagingCLRmemory,我意识到我知道的很少。我知道当您退出托管上下文时,CLR会在堆栈上放置一个“cookie”,这样垃圾收集器就不会占用您的内存空间;然而,在我读过的所有内容中,假设你正在调用一些用C编写的库。我想在托管上下文之外用C#编写我的应用程序的整个写入层,以在低级别管理数据。然后,我想从托管层访问这一层。在这种情况下,我的非托管C#代码会编译为IL并在CLR上运行吗?这是如何工作的? 最佳答案 我假设这与您在问题中提到的同一个C#数据库项目有关。用C/C++或任何其他语言实现整个写入

c# - WebAPI自托管503错误(HttpSelfHostConfiguration设置了HttpSelfHostConfiguration)

我有一个使用自托管WebAPI的窗口服务。HttpSelfHostConfiguration.HostNameComparisonMode设置HostNameComparisonMode.Exact为主机名强匹配。varconfig=newHttpSelfHostConfiguration(uri);config.HttpSelfHostConfiguration=System.ServiceModel.HostNameComparisonMode.Exact;this._server=newHttpSelfHostServer(config);_server.OpenAsync().

c# - 应该如何托管 GRPC 服务?

我使用Link中给出的示例在C#中创建了一个GRPC服务器.现在我想弄清楚我应该如何托管此服务器以便实现以下目标:我应该将此服务器设为控制台应用程序还是Windows服务。如果我将其设为Windows服务,那么更新该服务将很麻烦(这是一个很大的负面影响),如果我将其设为控制台应用程序,则更新只需要关闭exe。但这伴随着错误关闭相同的价格。还有其他更好的方法吗?使用IIS时不会出现此问题,因为我可以简单地从LB中删除网站并停止网站执行更新,但由于GRPC不会成为IIS的一部分,我不确定如何获取这个工作。欢迎任何关于更好架构的引用。 最佳答案

c# - 如何将非托管应用程序窗口置于最前面,并使其成为(模拟)用户输入的事件窗口

我假设我需要使用pinvoke,但我不确定需要调用哪些函数。场景:遗留应用程序将运行,我将拥有该应用程序的句柄。我需要:将该应用程序置于顶部(在所有其他窗口之前)使其成为事件窗口需要调用哪些Windows函数? 最佳答案 如果您没有窗口句柄,请在之前使用它:[DllImport("user32.dll",SetLastError=true)]staticexternIntPtrFindWindow(stringlpClassName,stringlpWindowName);现在假设您有应用程序窗口的句柄:[DllImport("us

c# - 不存在从对象类型 System.Web.UI.WebControls.TextBox 到已知托管提供程序 native 类型的映射

这是我的代码SqlCommandcmd=newSqlCommand("spRegisterUser",con);cmd.CommandType=CommandType.StoredProcedure;SqlParameterusername=newSqlParameter("@UserName",txtUserName.Text);SqlParameterpassword=newSqlParameter("@Password",txtPassword);SqlParameteremail=newSqlParameter("@Email",txtEmail.Text);SqlParame