带有非托管代码的CLR SP 我在C++中有一些代码(www. nrcom功能),我想在SQL Server的N28R2CLR SP中使用。试图在C语言中做一个包装,但没有运气。也许有人有一个工作示例或手册如何制作这样的包装器并设置所有必需的编译器/链接器选项
谢谢MSDN提供了将参数从本机代码打包到托管.NET的所有信息 本文解释了如何使用非托管代码(C++类) 64位本机代码有一个缺陷(本文未提及,因为它在amd64实际普及之前)。链接器参数必须进行调整,我只是通过反复试验来做到这一点 再想一想,NR.com更简单。 您可以创建一个包含所有所需函数的.DLL。这称为P/Invoke,它比我上面提到的C++/CLI解决方案简单得多 基本上,对于C代码带有非托管代码的CLR SP 我在C++中有一些代码(www. nrcom功能),我想在SQL Server的N28R2CLR SP中使用。试图在C语言中做一个包装,但没有运气。也许有人有一个工作示例或手册如何制作这样的包装器并设置所有必需的编译器/链接器选项,c++,sql-server-2008-r2,sqlclr,clrstoredprocedure,C++,Sql Server 2008 R2,Sqlclr,Clrstoredprocedure,谢谢MSDN提供了将参数从本机代码打包到托管.NET的所有信息 本文解释了如何使用非托管代码(C++类) 64位本机代码有一个缺陷(本文未提及,因为它在amd64实际普及之前)。链接器参数必须进行调整,我只是通过反复试验来做到这一点 再想一想,NR.com更简单。 您可以创建一个包含所有所需函数的.DLL。这称为P/Invoke,它比我上面提到的C++/CLI解决方案简单得多 基本上,对于C代码 extern "C" void do_something_with_numbers(doubl
extern "C" void do_something_with_numbers(double* array, int len);
您可以创建导出此函数的Wrapper.DLL
然后在C#中,您只需声明
class MyNRWrapper
{
[DllImport("WrapperDLL.dll", EntryPoint="do_something_with_numbers")]
public static extern void DoSomething([MarshalAs(UnmanagedType.LPArray, SizeParamIndex=1)] double [] array, int size );
};
你遇到的问题可能来自于DLL,你忘记把函数声明为“外部”C,而它们被C++编译器损坏了。使用CFF资源管理器工具,查看Wrapper.DLL的导出部分,查看它是否实际具有您要导出的函数。如果名称损坏,请添加外部“C”修饰符或更改C#中的入口点名称。
MSDN拥有将参数从本机代码整理到托管.NET的所有信息 本文解释了如何使用非托管代码(C++类) 64位本机代码有一个缺陷(本文未提及,因为它在amd64实际普及之前)。链接器参数必须进行调整,我只是通过反复试验来做到这一点 再想一想,NR.com更简单。 您可以创建一个包含所有所需函数的.DLL。这称为P/Invoke,它比我上面提到的C++/CLI解决方案简单得多 基本上,对于C代码extern "C" void do_something_with_numbers(double* array, int len);
您可以创建导出此函数的Wrapper.DLL
然后在C#中,您只需声明
class MyNRWrapper
{
[DllImport("WrapperDLL.dll", EntryPoint="do_something_with_numbers")]
public static extern void DoSomething([MarshalAs(UnmanagedType.LPArray, SizeParamIndex=1)] double [] array, int size );
};
你遇到的问题可能来自于DLL,你忘记把函数声明为“外部”C,而它们被C++编译器损坏了。使用CFF资源管理器工具,查看Wrapper.DLL的导出部分,查看它是否实际具有您要导出的函数。如果名称损坏,请添加外部“C”修饰符或更改C#中的入口点名称。
无答案,但a,可能。无答案,但a,可能。