Tag: c ++ cli

如何在c#中使用open xml sdk将doc转换为docx

请帮助我使用open xml sdk或除word自动化之外的任何其他方法将.doc文件转换为.docx。 提前致谢。

我在x86中附加VS2010 SP1后不久就出现了自由运行的测试应用程序

在Windows 7 x64上,当我在x86模式下连接到一个相当复杂的自由运行的应用程序时,它运行一段时间,然后可重复地退出。 MyApp.exe Managed (v4.0.30319)’ has exited with code -1073740791 (0xc0000409). 紧随其后 MyApp.vshost.exe: Managed (v4.0.30319)’ has exited with code 0 (0x0). 有时如果它运行正常,它会打到我的断点,我会检查状态,但是当我按F5继续前进时,应用程序以同样的方式退出。 快速搜索错误代码告诉我它是堆栈缓冲区溢出。 我听说它可能是由不正确的非托管互操作代码引起的。 我可以从调试器运行OK(F5),但自由运行和附加总是有这个问题。 有关如何缩小范围的任何想法? 编辑:这是我在不同的机器(Windows Server 2008 R2 x64)上看到的一个callstack,可能是相关的: clr.dll!__ crt_debugger_hook() clr.dll!___ report_gsfailure()+ 0xeb bytes clr.dll!_DoJITFailFast@0()+ 0x8 bytes clr.dll!CrawlFrame :: SetCurGSCookie()+ 0x2e9c4f bytes clr.dll!StackFrameIterator :: Init()+ 0x60字节 clr.dll!Thread :: StackWalkFramesEx()+ 0x8a bytes […]

C ++ / CLI MSIL程序集中的指针数组

我正在尝试包装一些遗留的C代码,以便与在.NET Core上运行的C#一起使用。 我正在使用这里给出的方法来创建一个编译为纯MSIL的C ++包装器。 它适用于简单的函数,但我发现如果我的代码使用指针指针或指针数组,它会因内存违规而崩溃。 通常它会崩溃Visual Studio,我必须重新启动所有内容,这很乏味。 例如,以下代码将导致崩溃: public ref class example { public: static void test() { Console::WriteLine(“\nTesting pointers.”); double a[5] = {5,6,7,8,9}; //Array. double *b = a; //Pointer to first element in array. Console::WriteLine(“\nTesting bare pointers.”); Console::WriteLine(a[0]); //Prints 5. Console::WriteLine(b[0]); //Prints 5. Console::WriteLine(“\nTesting pointer-to-pointer.”); double **c = &b; Console::WriteLine(c == &b); //Prints true. […]

C ++ / CLI-> C#错误C2526:C连接函数无法返回C ++类

我有一个使用VS2010 C#构建的简单.NET dll,它暴露了一个类的2个静态成员 public class Polygon { public static void Test(int test) {} public static void Test(List test) {} } 然后我从VS2010 C ++创建了一个Console应用程序,并在_tmain上面添加了这个函数 extern “C” void TestMe() { Polygon::Test(3); } 添加引用和编译会给我这个错误 1>WierdError.cpp(9): error C2526: ‘System::Collections::Generic::List::GetEnumerator’ : C linkage function cannot return C++ class ‘System::Collections::Generic::List::Enumerator’ 1> with 1> [ 1> T=int 1> ] 1> WierdError.cpp(9) : […]

C ++ / CLI枚举没有在C#中显示,参考C ++ / CLI项目

我无法获得C ++ / CLI枚举的内容以显示在C#项目中。 我可以看到我写的一个类,甚至看到枚举,但我看不到枚举值。 所以我不能在C#端使用这个东西。 无法显示C ++ / CLI枚举内容的任何原因。 我的C ++ / CLI项目被编译为混合以重用C ++库。 我正在使用Visual Studio 2005。

使用c ++ / cli桥连接c ++和c#代码

我有一个使用本机c ++ dll的本机c ++代码的客户端应用程序。 我正在调查将此代码与c#dll连接的可能性,因为它们更容易编写。 我决定编写一个c ++ / cli bridge dll,它可以加载LoadLibrary并将调用传递给c#dll。 客户端和dll之间的通信使得客户端传递指向接口对象的指针,然后dll通过该接口对象与客户端通信。 我将此对象包装在c ++ / cli桥接代码中,以便使用c#代码。 桥接器还应该使用__declspec(dllexport)公开几个函数,并将这些调用传递给c#dll,因此它需要有一个指向ac#接口的指针,它将传递给它们。 我想在gcroot 包装器中使用ac#object,但问题是我在这两个dll之间得到循环依赖。 C#dll需要引用bridge dll才能使用包装类,而bridge dll需要引用c#dll来使用接口类。 我知道我可以使用COM而不是用gcroot包装c#对象,但我不想。 有没有办法解决?

从C#调用者中的非托管DLL捕获stdout

我有一个C#应用程序通过一些C ++ / CLI编组代码调用本机C ++ DLL: C# – > C ++ / CLI – > C ++(无CLR) 我希望DLL在运行时将字符串更新发回给调用应用程序。 目前,非托管DLL将输出写入stdout。 基本上我需要在UI中捕获此输出。 在我正在炮轰非托管exe的其他情况下,这可以通过简单地将stdout从被调用者重定向到绑定到文本面板的UI数据中的字符串缓冲区来实现。 我没有选择使用P / Invoke调用DLL或将其作为exe来shell,因为互操作层执行非基本类型的基本编组。 非托管DLL没有CLR支持,必须保持这种方式。 我使用代表( http://msdn.microsoft.com/en-us/library/367eeye0(v=vs.100).aspx )取得了有限的成功,因为似乎总是存在托管和非托管世界发生冲突的地方。 以链接中的示例为例,将来自C ++ / CLI伪装的托管委托作为本机函数指针传递给DLL,但回调是在C ++ / CLI类的范围之外定义的,因此无法访问从中传入的托管委托。调用层(C#)。 理想情况下,我想定义一个接受非托管字符串的类,并可以将这些字符串转换为托管并回调到UI层,但如果此类具有托管字符串的必要支持,则无法将其传递给非托管代码。 我可能错过了一个简单的重定向技巧,它允许捕获stdout而不在层之间传递字符串(例如,从通过委托接收的C ++ / CLI重定向stdout)。 如果这是不可能的,任何人都可以提出替代技术吗? 托管C ++: using namespace System::Runtime::InteropServices; using namespace System; namespace BusinessObjectInterop { typedef void (__stdcall […]

C ++ / CLI相当于C#checked关键字

有没有办法让C ++ / CLI中的托管代码在算术溢出时抛出exception? C#有check关键字和全局项目标志来启用它们,但我在C ++ / CLI中都找不到… 我的情况是我在.NET中包装C ++库。 有时C ++本机代码会溢出。 我正在考虑将一些敏感的计算移动到现有的C ++ / CLI包装器,但也许这是不可能的?

C ++ / cli – >调用c#dll – >调用OpenFileDialog问题

我编写了一个C ++程序的扩展。 我编写标准的C / C ++ dll,我使用IJW来调用C#dll。 这一直很有效,直到我编写并调用了一个C#dll,后者又调用了一个OpenFileDialog和一个SaveFileDialog。 无论何时使用ShowDialog调用,应用程序都会冻结。 因此,在制作“最小工作示例”时,我得到了一个:System.Windows.Forms.dll中发生的类型为“System.Threading.ThreadStateException”的未处理exception 附加信息:在进行OLE调用之前,必须将当前线程设置为单线程单元(STA)模式。 确保您的Main函数标记了STAThreadAttribute。 仅当调试器附加到进程时才会引发此exception。 所以,我试图在我的“最低工作示例”中添加主要的STAThread属性,我得到了这个错误。 错误C2337:’STAThread’:找不到属性 那么,有两个问题: 如何d0我得到“最低工作示例”工作和 如何让真正的应用程序运行? (甚至可以在#pragma非托管块中添加STAThread属性吗?) #pragma unmanaged BOOL WINAPI DllMain (HINSTANCE hDLL, DWORD dwReason, LPVOID lpReserved) { … }

编组C ++指针接口通过C#函数调用非默认AppDomain

我在C ++和C#代码之间有一个有效的CLI接口。 代码有一个C ++抽象接口,如: ————-C++ Interface————— namespace cppns { class cppInterface { public: virtual bool Start(const char *pcDir) = 0; }; } ——Implementation of abstract C++ interface in same dll——— namespace cppns { class cppimp : public cppInterface private: gcroot mInternalClassAccess; public: cppimp::cppimp() { mInternalClassAccess = gcnew MyInternalCSharpClass(); } virtual bool cppimp::Start(const char *pcDir) { […]