有哪些选项/方法/软件可用于将JAR文件转换为托管.NET程序集?请在答案中提供所有商业和非商业方法.这些不包括需要在主机上安装Java的解决方案.
嘿,我正在寻找一个完全用C#编写的开源数据库引擎(没有任何原生dll,没有混合模式等等).它应该支持对表(INSERT,UPDATE,SELECT,DELETE和TRUNCATE)和事务的基本操作.不需要SQL支持.
谢谢.
当然,我在启动时通过回调将我的const字符串值从我的C++传递到我的C#中,但我想知道是否有一种方法可以在C++头文件中定义它们,然后我也可以在C#中引用它们.
我已经用枚举这样做,因为它们很容易.我在我的C++库项目中包含一个文件(通过顶部有一个pragma的.h文件)和我的C#应用程序(作为链接):
#if _NET
public
#endif
enum ETestData
{
First,
Second
};
Run Code Online (Sandbox Code Playgroud)
我知道它听起来很乱,但它的工作原理:)
但是......我怎么能用字符串常量做同样的事情 - 我最初认为平台之间的语法太不同了,但也许有办法呢?
使用涉及#if _NET,#define等的巧妙语法?
使用资源文件?
使用C++/CLI库?
有任何想法吗?
来自PHX Software的 SQLite 将托管程序集(System.Data.SQLite)与非托管DLL(SQLite 32位或64位dll)组合到一个文件中,并设法将它们链接在一起.
我该怎么做呢?我是否需要将托管程序集嵌入到非托管dll中,反之亦然?
即.我的问题是:
我问这个的原因是我想构建一个托管的zLib包装器.我知道在.NET中有托管类,但从经验来看它们有点受限(并且有点愚蠢,因为它们没有做适当的缓冲),所以我想创建自己的副本,也因为我想要学习如何做到这一点.
那么有谁知道我需要做什么以及如何做?
我发现了以下内容:
我将尝试这个,但任何其他可用的信息也会很好.
我用谷歌搜索和研究,但无法找到迭代我的数据模型中的所有或一些托管对象的最佳方法,并更新每个托管对象的属性值,在我的情况下,更新到当前日期.托管对象上下文和持久性存储委托方法都在我的Application Delegate中.我可以在程序的表视图中添加一些代码,但我觉得调用方法来更新这些值会更有效,因为它们可能不一定返回到表视图.
最终,我希望在我的应用程序的任何位置循环遍历我的托管对象并更新值.
如果您需要更多信息,请与我们联系.谢谢!
-COY
我正在尝试找到从非托管C++代码调用托管.NET代码的最佳性能方法.我在C++应用程序中找到了有关Hosting .NET的信息,我可以创建一个pRuntimeHost并启动它而不会出现问题.
ExecuteInDefaultAppDomain似乎非常有限,因为我真的想发送一些参数并让它返回一个信息结构.最明显的替代方法是使用COM方法,但当前的C#代码并未真正设置为与方法的接口.
无论哪种方式,我想返回整数,字符串(char*)s,双精度和其他核心C++类型.双方都有太多代码将C++转换为C#,并且使用托管C++不是一个可接受的解决方案,因为使用此C++代码的其他组不希望出于性能原因而开始使用托管代码.
目标是尽可能少地修改现有的C++和C#代码,但仍然在C++中的特定点使用C#代码中的方法,而不会严重影响C++代码的速度.
根据Internet上的代码,托管.NET的启动和关闭顺序是:
#include "stdafx.h"
#include <metahost.h>
#pragma comment(lib, "mscoree.lib")
int _tmain(int argc, _TCHAR* argv[])
{
ICLRMetaHost *pMetaHost = NULL;
ICLRMetaHostPolicy *pMetaHostPolicy = NULL;
ICLRDebugging *pCLRDebugging = NULL;
HRESULT hr;
hr = CLRCreateInstance(CLSID_CLRMetaHost, IID_ICLRMetaHost, (LPVOID*)&pMetaHost);
hr = CLRCreateInstance(CLSID_CLRMetaHostPolicy, IID_ICLRMetaHostPolicy, (LPVOID*)&pMetaHostPolicy);
hr = CLRCreateInstance(CLSID_CLRDebugging, IID_ICLRDebugging, (LPVOID*)&pCLRDebugging);
DWORD dwVersion = 0;
DWORD dwImageVersion = 0;
ICLRRuntimeInfo *pRuntimeInfo;
hr = pMetaHost->GetRuntime(L"v4.0.30319", IID_ICLRRuntimeInfo, (LPVOID *)&pRuntimeInfo);
ICLRRuntimeHost * pRuntimeHost = NULL;
hr = pRuntimeInfo->GetInterface(CLSID_CLRRuntimeHost, IID_ICLRRuntimeHost, (LPVOID *)&pRuntimeHost);
hr = pRuntimeHost->Start();
DWORD dwRetCode …Run Code Online (Sandbox Code Playgroud) 我原来是C++程序员,在C++程序中,程序中的每个进程都绑定到您的代码,即除非您希望它发生,否则什么都不会发生.并且根据您编写的内容分配(并释放)每个内存.因此,性能是您的全部责任,如果您做得好,您将获得出色的表现.
(注意:请不要抱怨没有自己编写的代码,如STL,毕竟这是一个C++非托管代码,这是重要的部分).
但是在托管代码中,例如Java和C#中的代码,您无法在某种程度上控制每个进程,内存是"隐藏"的,或者不受您的控制.这使得性能相对不为人知,大多数情况下你担心性能不佳.
所以我的问题是:我应该关注哪些问题和粗线,并牢记在托管代码中实现良好的性能?
我只能想到一些做法,例如:
但这些似乎永远不够,甚至令人信服!实际上也许我不应该提到它们.
请注意我不是要求C++ VS C#(或Java)代码比较,我刚才提到C++来解释这个问题.
我已经在这几个小时了,它开始变得沮丧.:(
我有一个我在.NET 4.0中创建的COM DLL,我希望能够使用VC++ 6中的遗留应用程序访问它.它对COM可见,我已经成功创建了TLB和SNK文件,将其移动到使用传统C++代码的机器,#imported TLB,一切编译都很好.
如下:
RegAsm ProtracFunctions.dll/codebase
gacutil/i ProtracFunctions.dll
他们都很成功.
当我启动我的应用程序时,只要我点击CoCreateInstance,我就会收到消息"Class not registered".
我在RegEdit中注意到我的DLL似乎已经注册了.那是我做了一些研究,下载了ProcMon,并意识到它在不同的位置.CLSID略有不同,如果我尝试修改ProtracFunctions.reg文件(使用ProcMon提取的GUID)RegAsm给我的,它会对ProcMon产生影响(比"NAME"更多"SUCCESS"消息至少找不到"消息",但我似乎错过了,大量的注册表位置.如关键的"TreatAs","InprocServerX86"等.
如果有人能告诉我:
A)我首先做错了什么
要么
B)当您"注册"COM DLL时,确切地添加了哪些注册表值的列表,以便我可以自己进行并手动执行.(不太理想,我意识到).
TIA!
我的代码:
CoInitialize(NULL);
CComQIPtr <ProtracFunctions::IDockingStation> spTestCom;
HRESULT hRes = spTestCom.CoCreateInstance(CLSID_ProtracDCS, 0, CLSCTX_ALL);
if (SUCCEEDED (hRes))
{
printf("Created the instance");
unsigned char Ret;
unsigned char ErrCode;
SAFEARRAY *pSA;
spTestCom->DockConnect(3, 19200, &Ret);
spTestCom->GetTagReads(1, &ErrCode, &pSA);
spTestCom->PowerOffReader(1, &Ret);
spTestCom->DockDisconnect();
spTestCom.Release ();
}
else
{
_com_error error(hRes);
LPCTSTR errorText = error.ErrorMessage();
AfxMessageBox(errorText);
//automatic cleanup when error goes out of scope
}
Run Code Online (Sandbox Code Playgroud)
补充说明:
开发机器运行Win …
我的托管ODP.net webapp在本地工作,但在将其部署到服务器时,它失败并显示错误:
"TNS:监听器当前不知道连接描述符中请求的服务"
从环顾四周看,这似乎是因为它无法访问tnsnames.ora文件.
我试过以下但没有成功:
在服务器上,尝试运行tnsping会产生错误TNS-03502:未找到消息3502; product = NETWORK,facility = TNS没有消息文件
我错过了什么?
我在这里遗漏了一些基本的东西.从源语言编译成字节码(java)或中间语言(.NET)然后从JVM或CLR内部运行它们有什么用?
使用托管代码的性能(无论是轻微还是大)都有所下降,但有哪些好处?我知道有垃圾收集和内存管理,但即便如此,将源代码直接编译为原生而不需要这个中间级别也不是更好吗?
另外(我在这里添加它,因为它与问题直接相关) - 显然,Windows 10 Universal应用程序是使用.NET Native编译的,它编译为本机机器代码.我很好奇为什么以前没有使用所有.NET程序.
managed ×10
c# ×6
unmanaged ×4
.net ×3
c++ ×3
dll ×2
java ×2
.net-native ×1
assemblies ×1
core-data ×1
database ×1
embed ×1
iphone ×1
jar ×1
jvm ×1
objective-c ×1
odp.net ×1
oracle ×1
performance ×1
string ×1
transactions ×1