我在COM Interop遇到了一些麻烦,情况如下:
32位COM Exe服务器(用C++编程)提供了一个类,其中包含一些处理第三方硬件的成员函数(此硬件还将COM Exe Server绑定到32位,因为制造商不支持64-位).
我想在64位.NET(C#)应用程序中使用32位COM Exe Server ...首先,我尝试在Visual Studio 2010中添加对Exe Server的引用,并创建了一个Interop-DLL.这个Interop-DLL为我提供了必要的功能,其中一个被声明为:
int Initialize(ref string callingApplicationPath);
Run Code Online (Sandbox Code Playgroud)
C++中的原始声明如下所示:
LONG Class::Initialize(BSTR* callingApplicationPath)
Run Code Online (Sandbox Code Playgroud)
......在IDL中这样:
[id(1)] LONG Initialize([in] BSTR* callingApplicationPath);
Run Code Online (Sandbox Code Playgroud)
但是,当我想通过Interop-DLL从C#调用此函数时,它会抛出BadImageFormatException.看起来Interop-DLL是一个32位DLL(也许有可能生成64位DLL?).
我的下一次尝试是使用以下代码实例化Exe Server:
Type type = Type.GetTypeFromProgID("OurCompany.Class");
Object o = Activator.CreateInstance(type);
Object[] args = { Marshal.StringToBSTR(str) };
Object result = type.InvokeMember("Initialize", BindingFlags.InvokeMethod, null, o, args);
Run Code Online (Sandbox Code Playgroud)
另一方面,这段代码会抛出一个TargetInvocationException(更具体地说:0x80020005(DISP_E_TYPEMISMATCH)).不幸的是我无法找到我必须从C#传递给函数的类型...我在Marshal类中尝试了所有的StringToXXX函数但似乎没有任何工作:/我想我在这里缺少一些简单的东西,但我看不出来.
任何帮助是极大的赞赏!
最好的祝福
基督教
我遇到了一个小问题,无法找到满意的解决方案.有一个字节数组,我需要这些字节按高7位排序,同时保留低位的顺序.
所以原来它看起来像这样:
// sort buf[N] to tmp[N]
uint offs[128+1]; uint c,i,s;
for( i=0; i<128; i++ ) offs[i]=0;
for( i=0; i<l; i++ ) offs[buf[i]>>1]++;
for( i=0,s=0; i<128; i++ ) c=offs[i], offs[i]=s, s+=c; offs[i]=s;
byte* tmp = new byte[N];
for( i=0; i<N; i++ ) c=buf[i], tmp[offs[c>>1]++]=c; // sort
Run Code Online (Sandbox Code Playgroud)
但是这些块足够大(目前为8M),我想使用多个线程,每个线程额外的8M是显而易见的.
所以我尝试使用一些简单的基数排序:
void radix( byte* buf, uint h, uint l, uint mask ) {
uint p = (h+l)>>1, q = h;
uint i = offs[h], j = offs[l]-1; h = offs[p];
if( (i<h) && …Run Code Online (Sandbox Code Playgroud) 我打算为iOS设备开发一个ePub阅读器.我不想为此使用webView.在这个应用程序中,我想要的功能,如iBook或节应用程序.我想知道,在开发Stanza应用程序时使用了哪些approch.
我有一个很长的列表要在列表视图中显示。假设有 200 个项目。这是一个很长的清单,但我无法减少它。现在我的列表很慢并且对用户来说不方便。
我需要类似分页系统的东西:一开始我加载 25 个项目。当用户到达末尾时,我会显示一个按钮或类似的东西来加载其他 25 个项目。Iphone 风格的解决方案。
有没有更好的办法?或者什么是最好的解决方案?
谢谢!
如何使用lisp获取mp3文件的艺术家
(let ((in (open "test.mp3" :direction
:input
:element-type '(unsigned-byte 8))))
(when in
(loop for line = (read-byte 'utf-8 in)
while line do (format t "~a" line ))
(close in)))
Run Code Online (Sandbox Code Playgroud) 我们遇到的问题是客户向我们提供了包含在版本中的内容,其中包括许多视频文件.它们的内容通常是SVN,但由于它们无法访问它,因此版本化这些大型二进制文件似乎并不适合SVN.我们的测试不需要这些文件(我们只需要测试我们是否可以发现视频),我们不负责检查/测试客户提供的内容.
所以我想知道是否有可能有一个没有版本化的SVN目录,并且只是一个常规目录,在更新/退出时仍然可以拉出来?或者SVN有办法从非SVN源中提取文件,有点像svn:externals但不看另一个repo?
是否有SVN解决方案,或者如果我们想避免对文件进行版本控制,我们是否应该将它们放在另一个存储中并配置构建/部署脚本以单独提取它们?
在Eclipse中右键单击文件夹时,是否有一个插件可以提供"在这里打开终端"选项?我找到了这个,但它似乎只适用于Windows,而我正在使用Ubuntu.
我在哪里可以找到一个可以使用的?或者就此而言,如果你知道的话,还有很多"标准"数据结构?
我正在寻找开发一个绿地web应用程序,它将重用许多Java组件.对我来说,显而易见的选择是Grails或jRuby on Rails,但我很难找到两者的客观比较.有没有明确的理由选择一个关于另一个:
我不是在寻找有关开发人员或社区活动的答案.
(我检查了Grails vs. Rails,它与我无关)
我正在尝试使用NUnit设置一个MSBuild作为单元测试驱动程序,但是在NUnit完成后脚本会一直挂起.它似乎没有完成它的工作,让MSBuild继续工作.
我正在使用.NET 4.0并使用NUnit 2.5.8.
如果我手动或使用gui(VS2010或NUnit)运行测试,它可以正常工作,但在MSBuild调用时则不行.
我很感激任何寻找错误的帮助,或者只是想知道在哪里寻找答案.
手动命令如下所示:
C:\ ....> nunit \nunit-console.exe buildbinaries\YYYY.XXXX.Extractor.Test.IntegrationTest.dll /xml=nunit.xml
和缩写的MSBuild:
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- define folders for build output and reports -->
<PropertyGroup>
<BuildPath>buildbinaries\</BuildPath>
<ReportPath>buildreports\</ReportPath>
<ReleaseFolder>release_artefacts\</ReleaseFolder>
<PublishFolder>c:\ZZZ Applications\published builds\</PublishFolder>
<DeploymentFolder>\\seldclq99\ZZZ_Costanza_Dev$\</DeploymentFolder>
</PropertyGroup>
<PropertyGroup>
<!-- specify assemblies that should be included in coverage report -->
<NCoverAssemblyList>YYYY.XXXX.Extractor.Business.dll; YYYY.XXXX.Extractor.Common.dll YYYY.XXXX.Extractor.Configuration.dll YYYY.XXXX.Extractor.DAL.Access.dll YYYY.XXXX.Extractor.DAL.Facade.dll YYYY.XXXX.Extractor.Service.Contracts.dll YYYY.XXXX.Extractor.Service.dll YYYY.XXXX.Extractor.Service.Host.WebHost.dll YYYY.XXXX.Extractor.ServiceGateway.dll</NCoverAssemblyList>
</PropertyGroup>
<!-- define item group for deliverables -->
<ItemGroup>
<Binaries Include="$(BuildPath)/**/*.*" Exclude="$(BuildPath)nunit*" />
</ItemGroup>
<!--
This is the default target that will be executed …Run Code Online (Sandbox Code Playgroud)