标签: native

如何重命名DLL但仍然允许EXE找到它?

我们有一个内部生成的DLL,我们有相关的存根LIB.

我们还有一个EXE,它使用这个DLL使用静态链接到DLL的LIB文件的简单方法(即,不是手动使用LoadLibrary).

当我们部署EXE时,我们希望为了混淆原因(根据客户的要求)更改DLL文件名.

我们怎么能这样做,以便我们的EXE仍然自动找到DLL?

我已经尝试重命名DLL和LIB文件(在它们构建为正常名称后),然后将EXE项目设置更改为与重命名的LIB链接.这在运行时失败,因为我猜DLL的名称被烘焙到LIB文件中,而不是简单地通过链接器猜测".lib"替换为".dll".

一般情况下,我们不希望将此混淆应用于DLL的所有用途,因此我们希望保留当前DLL项目输出文件.

我希望有一种方法可以编辑DLL的LIB文件,并用其他东西替换DLL文件的硬编码名称.在这种情况下,这可以完全在EXE项目中完成(可能作为预构建步骤).


更新:我发现延迟加载不起作用,因为我的DLL包含导出的C++类.看到这篇文章.

还有其他选择吗?

windows dll native

22
推荐指数
5
解决办法
2万
查看次数

将.NET App转换为x86本机代码

有一个完全用C#编写的程序,它以.NET Framework 2.0为目标.有没有办法我可以以某种方式编译(翻译)托管EXE到本机的EXE,因此它可能是.NET不可知的?我知道可能有商业产品用于此目的......但它们有点贵.

问题是我们要在运行没有安装.NET Framework的Windows XP的计算机上部署该程序.还要求程序的大小不得超过500Kb(最大1Mb),因为它是从Web服务器下载的(现在大小为255Kb).这就是为什么我们无法将完整的.NET FX(甚至是简化的)附加到下载程序的文件中.

显然,这是一个可怕的软件工程错误应该早先检测到并避免,所以我们可以使用像C++这样的本机技术.

我们现在已经尝试过Novell的Mono - 一个用于Linux,MAC和Windows的.NET Framework的开源实现.Mono由C#编译器,IDE,运行时(CLR)和类库程序集组成(如System.dll和mscorlib.dll - 非常类似于安装到GAC的.NET的类库程序集).我们尝试做的是找到CLR文件并将它们与我们程序的文件和一些程序集一起发送.这样,可以通过在用户的计算机上运行"mono program.exe"(命令提示符)来调用该程序.除了给最终用户CLR文件(mono.exe和mono.dll)的这种使用带来的不便之外,总共大约2.5 Mb,远远大于所需的500 Kb甚至1 Mb.

所以,我们没有其他选择,只能通过编译器将我们的.NET应用程序转换为本机应用程序,但问题仍然存在 - 我们应该使用什么编译器以及我们在哪里可以找到...

目前我偶然发现了微软研究院的Singularity OS项目.它是一个开源研究操作系统,用托管代码编写(至少部分).Singularity OS包括一个Bartok编译器,操作系统使用该编译器将托管程序转换为本机程序(x86 32位).应该注意的是,Bartok无法将.NET 2.0的所有方面都转换为本机代码,但大部分都是如此.但是我还没有学会如何使用奇点......

如果你能提供一些有关问题的有用提示和建议,你自己使用Singularity OS和Bartok Compiler的经验,或者我忽略的问题的另一种方法以及解决方法,我将非常感谢你.

非常感谢你提前!

最后,使用Mono的Full AOT功能(在Callum Rogers的建议下)我设法生成了缺少CLI头的program.exe.dll.所以它看起来就像一个原生的dll.但是,我无法弄清楚如何将该DLL转换为exe或使其运行.此dll似乎也没有暴露任何感兴趣的函数,如main函数.

.net c# clr mono native

22
推荐指数
3
解决办法
2万
查看次数

我可以使用MongoDB替代iOS上的CoreData吗?

我刚刚开始阅读MongoDB和CouchDB等NoSQL技术.我很想知道我是否可以使用MongoDB或任何NoSQL技术来替代核心数据应用程序.

核心数据应用程序可能需要很长时间才能学习和实现,特别是如果您的应用程序很复杂并且您只想进行一些简单的添加,编辑,删除和查询(CRUD内容).

因为它看起来像JSON,看起来它可以运行得非常快; 我对NoSQL over Core Data的实现很感兴趣.

我可以将MongoDB作为本机运行吗?我做了一些谷歌搜索,但我真的无法得到我追求的具体答案.

如:

我不确定iphone在iphone平台上的优势是什么,是否支持,如果我提交一个带有NoSQL的应用程序,苹果团队会否认它吗?

谢谢

iphone couchdb native core-data mongodb

22
推荐指数
1
解决办法
2万
查看次数

如何确定Native JavaScript Object是否具有属性/方法?

我觉得这很简单:

if(typeof(Array.push) == 'undefined'){
  //not defined, prototype a version of the push method
  // Firefox never gets here, but IE/Safari/Chrome/etc. do, even though
  // the Array object has a push method!
}
Run Code Online (Sandbox Code Playgroud)

它在Firefox中运行良好,但在IE,Chrome,Safari,Opera中没有,它们使用此测试将本机Array对象的所有属性/方法返回为"undefined".

.hasOwnProperty(prop)方法仅适用于实例...所以它不起作用,但通过反复试验,我注意到这是有效的.

//this works in Firefox/IE(6,7,8)/Chrome/Safari/Opera
if(typeof(Array().push) == 'undefined'){
  //not defined, prototype a version of the push method
}
Run Code Online (Sandbox Code Playgroud)

使用这种语法来确定属性/方法是否存在于Native Object /〜"JavaScript Class"上有什么问题,或者有更好的方法吗?

javascript methods native properties typeof

21
推荐指数
3
解决办法
5万
查看次数

在Windows上创建node.js本机扩展

我正在尝试从node.js应用程序中访问特定的本机Windows API调用.我相信最好的方法是创建一个本机扩展/插件到节点,我可以在我的node.js应用程序中要求并从JavaScript调用.

我在哪里可以找到有关如何实际编译此类可执行文件的资源?我可以找到有关如何编写它的说明,但所有构建说明似乎都适用于Linux.我很好用mingw编译g ++,我不需要使用Visual Studio.另外,在哪里可以找到编译扩展所需的头文件?

javascript windows native add-on node.js

20
推荐指数
2
解决办法
9706
查看次数

更新到JRE7,无法加载nativelib jar,但JRE6工作正常

对于我的JNLP文件,有一些nativelib信息,如下所示:

<resources os="Windows">
    <nativelib href="lib/x264-win.jar" />
</resources>
<resources os="SunOS" arch="sparc">
    <nativelib href="lib/x264-SunOS-sparc.jar" />
</resources>
<resources os="SunOS" arch="x86">
    <nativelib href="lib/x264-SunOS-x86.jar" />
</resources>
Run Code Online (Sandbox Code Playgroud)

当我更新到JRE7时,无法加载nativelib jar,但JRE6工作正常.

加载nativelib代码如下:

String source = "x264.jar";
ClassLoader cl = Thread.currentThread().getContextClassLoader();
URL url= cl.getResource(source);
Run Code Online (Sandbox Code Playgroud)

"x264.jar"是x264-win.jar中的一个jar,lib/x264-SunOS-sparc.jar或lib/x264-SunOS-x86.jar.

当我使用JRE6加载x264.jar时,它工作正常.但是当我更新到JRE7时,它无法加载x264.jar.

当使用JRE6时,url将是"x264.jar"信息,如jar:http://test.local:8080/JNLP.jar!/x264.jar,但是使用JRE7,url将为null,我发现代码不是加载nativelib"x264.jar"

有没有人发现JRE7无法加载nativelib.jar?是使用Thread.currentThread().getContextClassLoader()加载"x264.jar"的问题?

java jnlp native

19
推荐指数
1
解决办法
936
查看次数

更改按钮颜色反应原生

我想简单地改变按钮的颜色,但我不能.我试图直接在按钮中更改,并将样式传递给它.但他们都没有奏效.这是我非常简单的代码.

 export default class Dots extends Component {
  render() {
    return (
      <Image style={styles.container}  source={require('./background3.png')}>
      <Button title='play' style = {{color:'red'}}/>
      </Image>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    flex:1,
    backgroundColor:'transparent',
    resizeMode:'cover',
    justifyContent:'center',
    alignItems:'center',
    width:null,
    height:null
  },

  button:{
  backgroundColor:'#ff5c5c',
  }

}); 
Run Code Online (Sandbox Code Playgroud)

native reactjs

19
推荐指数
2
解决办法
2万
查看次数

为什么Eclipse使用本机启动器?

Eclipse IDE是用Java编写的大型桌面应用程序的最佳示例之一.

我见过的大多数Java应用程序通常依赖于批处理或shell脚本来构建具有应用程序类路径的字符串,并使用类路径作为env变量启动JVM.

另一方面,Eclipse依赖于本机启动器.这是为什么 ?这个启动程序的脚本没有做什么?

我记得在大约一年半前读过一篇文章解释说"我们用本地发射器会更好",但是id没有解释发射器的内部工作原理.

java eclipse native

18
推荐指数
3
解决办法
3660
查看次数

从本机dll生成C#DLLImport声明

你知道一个软件从一个本机DLL自动生成C#代码(在.cs中有[DllImport]属性),以便在C#代码中使用这个DLL吗?

c# dll native dllimport

18
推荐指数
1
解决办法
9616
查看次数

java 8中javaw进程的私有字节增加

我的项目已经开始使用java 7中的java 8.

切换到java 8后,我们发现消耗的内存随着时间的推移而越来越高.

以下是我们所做的调查:

  • 只有从java7和java8迁移后才会出现问题
  • 因为元空间是与内存相关的唯一内容,它是从hava 7变为java 8.我们监视了元空间,这不会超过20 MB.
  • 堆也保持一致.

现在剩下的唯一途径是分析内存如何在java 7和java 8中进行分发,特别是私有字节内存.任何想法或链接在这里将不胜感激.

注意:此javaw应用程序是基于swing的应用程序.

更新1:使用NMT工具分析本机内存并生成与基线相比占用的内存差异.我们发现堆保持相同但线程正在泄漏所有这些内存.因此Heap没有变化,我假设这个泄漏是由于本机代码.

所以挑战仍然存在.关于如何分析所有线程占用的内存的任何想法在这里都会有所帮助.以下是从本机内存跟踪中获取的快照.

在这张图片中,你可以看到88 MB的线程增加了.竞技场和资源处理数量增加了很多.

在此输入图像描述

在这张图片中你可以看到这个Malloc中增加了73 MB.但是这里没有显示方法名称. 在此输入图像描述

所以请在理解这两个截图时提供一些信息.

java-native-interface multithreading native java-7 java-8

18
推荐指数
2
解决办法
1910
查看次数