C# 可否静态链接C 语言生成的Lib 库? RT。C++/CLI 似乎可以 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以吧,Private Declare Function QueryPerformanceCounter Lib "kernel32" (ByVal lpPerformanceCount As Long) As Boolean Private Declare Function QueryPerformanceFrequency Lib "kernel32" (ByVal lpFrequency As Long) As Boolean做精确计时时的调用。 LS,你那个是VB 代码吧现在我想知道 C# 和 C++/CLI 混合编程是否可行? C# 调用C++/CLI 生成的LIB 也不可以吗?因为安全方面的原因只能用LIB 不能用DLL,,怎么办啊!!! C++/CLI与C#的混编很简单啊...把其中一个生成库dll,另外一个引用就ok了.如果是C++和C#的话:1.把C++库做成COM库,注册然后可以在C#里声明使用2.C++导出函数,然后在C#里声明使用3.C#编写成强命名程序集,安装到GAC后用regasm注册;之后可以在任何支持COM的语言里调用(C++,JScript,VBScript,VBA,VB6....)4.C++通过.net的非托管API载入C#程序集后获取接口及创建对象.至于C#和C++静态库的链接...以前好像听说有人弄过.具体是怎么样的不清楚. dll 和COM 都不行,那个C 代码是用来加解密的,如果生成DLL 别人就可以随便调用了。 C#要调用非托管LIB类库只能通过VC.NET先封装一次。没有其它的办法 封装成什么?不是DLL 就是Lib 吧???C# 又调用不了lib 你是不是考虑下加密的思路?对DLL可以进行加密,并在内存中展开使用不可以吗?或者改个名字,除了你没人知道是DLL...... 找到一个例子:《让C++代码与C#代码一起生成一个单一的Assembly》这种方法也许可行,不过要先将好多.C 文件转成 C++ 代码,有没有简单的方法?//c.h#pragma onceint sqr(int n); //c.cpp#include "c.h"int sqr(int n){ return n*n;} 为了能让它与C#共同工作,必须为它加个.NET的包装: //wrapper.cpp#include "c.h"namespace wrapper{ public ref class calc { public: static int sqr(int n) { return ::sqr(n); } };} 现在可以用C#去调用它了: //cs.csusing System;namespace test{ public class Program { public static void Main() { Console.WriteLine(wrapper.calc.sqr(11)); } }} 现在,如何将这些源码编译成一个exe文件呢? 用集成环境是很难的,最方便的,还是创建一个makefile或MSBuild来完成。 由于这个例子很简单,我用命令行来创建这个exe文件: cl c.cpp wrapper.cpp /c /clr 生成 c.obj 和 wrapper.obj csc /addmodule:wrapper.obj /target:module /out:cs.netmodule cs.cs 生成 cs.netmodule link c.obj wrapper.obj cs.netmodule /LTCG /Subsystem:Console /entry:test.Program.Main /out:o.exe 生成 o.exe 运行 o.exe 显示结果:121 这不就是cli的作用吗?HowdyHappy说的满清楚了,其中需要使用c++/cli实现中间层,就是非托管到托管的转换 “贪食蛇” 编程问题 求一段C#代码 selectall全选textBox问题 如何去掉 DataGridView 中文本框的默认系统菜单 俺是菜鸟..一个简单问题,,50分来抢吧. c#.net 2005的类视图窗口按鼠标右键没有出现方法向导等 高分求教DevExpress的XtraGrid中当前行数据获得!急!!!在线等待,分不够可再加 MemoryStream是否需要Close()? 为什么在保存Excel文件的时候很慢,最后导致页面无法显示? 请教一个listbox问题 socket的问题。 高手进来说下思路吧!!!!!! 请如如何让TcpClient通过代理来访问?
Private Declare Function QueryPerformanceCounter Lib "kernel32" (ByVal lpPerformanceCount As Long) As Boolean
Private Declare Function QueryPerformanceFrequency Lib "kernel32" (ByVal lpFrequency As Long) As Boolean
做精确计时时的调用。
把其中一个生成库dll,另外一个引用就ok了.
如果是C++和C#的话:
1.把C++库做成COM库,注册然后可以在C#里声明使用
2.C++导出函数,然后在C#里声明使用
3.C#编写成强命名程序集,安装到GAC后用regasm注册;
之后可以在任何支持COM的语言里调用(C++,JScript,VBScript,VBA,VB6....)
4.C++通过.net的非托管API载入C#程序集后获取接口及创建对象.至于C#和C++静态库的链接...以前好像听说有人弄过.具体是怎么样的不清楚.
对DLL可以进行加密,并在内存中展开使用不可以吗?
或者改个名字,除了你没人知道是DLL......
#pragma once
int sqr(int n);
//c.cpp
#include "c.h"
int sqr(int n)
{
return n*n;
} 为了能让它与C#共同工作,必须为它加个.NET的包装:
//wrapper.cpp#include "c.h"
namespace wrapper
{
public ref class calc
{
public:
static int sqr(int n)
{
return ::sqr(n);
}
};
} 现在可以用C#去调用它了:
//cs.cs
using System;
namespace test
{
public class Program
{
public static void Main()
{
Console.WriteLine(wrapper.calc.sqr(11));
}
}
}
现在,如何将这些源码编译成一个exe文件呢?
用集成环境是很难的,最方便的,还是创建一个makefile或MSBuild来完成。
由于这个例子很简单,我用命令行来创建这个exe文件: cl c.cpp wrapper.cpp /c /clr
生成 c.obj 和 wrapper.obj csc /addmodule:wrapper.obj /target:module /out:cs.netmodule cs.cs
生成 cs.netmodule link c.obj wrapper.obj cs.netmodule /LTCG /Subsystem:Console /entry:test.Program.Main /out:o.exe
生成 o.exe 运行 o.exe 显示结果:121
HowdyHappy说的满清楚了,其中需要使用c++/cli实现中间层,就是非托管到托管的转换