jjzjj

c# - 从 C# 访问 Win32 C/C++ 结构成员

我正在使用某种Hook拦截本地dll或exe从C#执行的Win32API调用。在这种特殊情况下,我对user32.dll中的DrawText()感兴趣。它在Win32API中是这样声明的:INTWINAPIDrawTextW(HDChdc,LPCWSTRstr,INTcount,LPRECTrect,UINTflags)LPRECT结构具有以下签名(也在Win32API中):typedefstructtagRECT{LONGleft;LONGtop;LONGright;LONGbottom;}RECTLPRECT;LONG是32位系统上32位整数的typedef(不知道64位系统,此时

c++ - WcfSvcHost 和 IIS WCF 主机遇到 BadImageFormatException

在Vistax64上的VisualStudio2008中创建WCF服务库在引用x86DLL时很麻烦。调用32位DLL的服务需要具有x86平台目标才能在64位操作系统上运行。执行此操作时,WcfSvcHost在您尝试调试服务时会抛出BadImageFormatException。有一个bugreport在MS连接上。我使用的解决方法是coreflagWcfSvcHostas32-bit.明显问题我遇到的主要问题是这个第三方native32位DLL无法使用某些WCF主机加载。当调用使用第三方DLL的服务操作时,我收到以下错误:System.TypeInitializationExcepti

c# - 在 C# 程序中使用 C++ 常量

我们有这样一种情况,我们在C#(WPF)应用程序中使用一组第三方非托管C++库,但我们也使用它们的一部分包含库来构建我们自己的非托管库以在我们的应用程序中使用。这些库生成元数据,存储在数据库中。但是,我们必须在我们的C#代码中复制一些与此元数据相关的常量,以便使用元数据。然后,如果这些常量中的一些在版本之间发生变化,则存在一个潜在的问题。C#应用程序是否有一种干净的方法来使用C++包含文件中定义的常量?谢谢,wTs 最佳答案 我有一个解决方案,您可能认为它不是非常“干净”,但它会起作用。问题是使用枚举或#define预处理器指令将丢

c# - 如何在 C# 中编码列表

我必须将一个列表从C#发送到C++。C#列表是ListMyList并且C++代码将其接受为listcppList.如何为此使用marshalas。谢谢 最佳答案 最好不要在native代码和托管代码之间使用复杂类型编码(marshal)处理。在List的情况下,这些类型完全不同,因为它们对每个项目都有不同的内存布局。所以最好的方法是在接受字符串数组(char*)的nativedll中编写实用程序函数,然后手动构建nativeList并最终调用所需的方法。您可以轻松创建该实用函数的包装器。

c++ - 我可以从 C++ 调用 clojure 代码吗?

我正在为用C++编写的程序编写插件。插件被放置在一个特定的目录中,并被主应用程序调用。我想用Clojure编写大部分插件(GUI、计算等),但实际的“插件”需要用C++编写。各种数据需要从C++传递到Clojure。我该怎么做?JNI/JNA、套接字、系统调用?(我知道的不多) 最佳答案 我知道这个问题很老,但也许有人觉得这很有用。#include/*whereeverythingisdefined*/#includeintmain(){JavaVM*jvm;/*denotesaJavaVM*/JNIEnv*env;/*pointe

C# 应用程序调用 C++ 方法,错误 : PInvoke: Cannot return variants

我正在尝试弄清楚如何将复杂对象从C++dll返回到调用C#应用程序。我有一个简单的方法,它返回一个工作正常的int。谁能告诉我我做错了什么?C#应用程序:classProgram{staticvoidMain(string[]args){//Erroronthisline:"PInvoke:Cannotreturnvariants"vartoken=LexerInterop.next_token();}}C#LexerInterop代码:publicclassLexerInterop{[DllImport("Lexer.dll")]publicstaticexternobjectnex

c# - PInvoke:在 C++ 中分配内存并在 C# 中释放它

我们正在使用PInvoke在C#和C++之间进行互操作。我有一个如下所示的互操作结构,另一侧具有相同布局的C++结构。[StructLayout(LayoutKind.Sequential)]publicstructMeshDataStruct:IDisposable{publicMeshDataStruct(double[]vertices,int[]triangles,int[]surfaces){_vertex_count=vertices.Length/3;_vertices=Marshal.AllocHGlobal(_vertex_count*3*sizeof(double)

c# - 为 C++ DLL 实现回调 C# 函数

我正在为我的C++库编写一个DLL包装器,以便从C#调用。此包装器还应具有从库中调用并在C#中实现的回调函数。这些函数有例如std::vector作为输出参数。我不知道该怎么做。如何通过回调函数将未知大小的缓冲区从C#传递到C++?举个例子CallbackFunctionFunctionImplementedInCSharp;voidFunctionCalledFromLib(conststd::vector&input,std::vector&output){//HereFunctionImplementedInCSharp(C#delegate)shouldsomehowbecal

java - 无法使用JNI从java调用C++的成员函数

我按照以下链接中给出的说明进行操作CallcfunctionfromJava之后我就可以调用C++函数了。但是现在我想从Java调用C++类的成员函数。为了清楚地描述它,我引用了下面的场景。java。有一个类叫做HelloWorld.java它有一个名为print()的原生函数现在使用Java的JNI我创建了HelloWorld的等效头文件。之后我写了实现HelloWorld.cpp中的这个头文件现在我想从“HelloWorld.cpp”调用“rectangle.cpp”的成员函数我创建了“矩形”对象,并且调用了它对应的函数。但是在编译代码时它给了我一个错误称为“未解析的外部符号”。在

c# - 将 C char[][] 数组编码到 C#

我看了又看,尝试了所有我能想到的或发现的建议。我仍然没有运气获得我需要的数据。我正在使用第三方DLL,我认为它是用C语言编写的。我需要在C#中访问此DLL中的函数。在大多数情况下,我有这个工作,除了一个功能。我遇到问题的函数具有以下header:uintqueryNumOfServers(USHORT*NumOfServers,charServerNames[8][16]);我在我的C#应用程序中声明了以下内容[DllImport("client.dll",CharSet=CharSet.Ansi]publicstaticexternuintqueryNumOfServers(refs