我正在构建一个C#ActiveX DLL ...我使用REGASM或REGSVR32进行注册吗?
如何注册64位接口和32位接口?
我有以下代码:
namespace WindowMover
{
using System.Windows.Forms;
static class Logic
{
[DllImport("user32.dll", EntryPoint = "SetWindowPos")]
public static extern IntPtr SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int x, int Y, int cx, int cy, int wFlags);
public static void Move()
{
const short SWP_NOMOVE = 0X2;
const short SWP_NOSIZE = 1;
const short SWP_NOZORDER = 0X4;
const int SWP_SHOWWINDOW = 0x0040;
Process[] processes = Process.GetProcesses(".");
foreach (var process in processes)
{
var handle = process.MainWindowHandle;
var form = Control.FromHandle(handle);
if (form == null) continue; …Run Code Online (Sandbox Code Playgroud) 当使用COM时,布尔值将作为VARIANT_BOOL传递,该变量在wtypes.h中声明为short.还有预定义的true和false值:
#define VARIANT_TRUE ((VARIANT_BOOL)-1)
#define VARIANT_FALSE ((VARIANT_BOOL)0)
Run Code Online (Sandbox Code Playgroud)
哪个是从VARIANT_BOOL转换为C++ bool类型的最佳方法?明显的变体是:
与VARIANT_FALSE比较
简单地投奔布尔
其他方式可以很容易地发明.
这是最好的方法 - 最可读,最符合标准,最不容易出现种植错误,最不容易出现移植到64位平台的问题?
我有一个IDL文件中定义的接口,我想在C#中使用.有没有办法将IDL转换为C#中可用的东西?
我正在尝试将一些Scala代码注入到我现有的Java应用程序中.(所以说,我想要更多的乐趣).
我在Scala中创建了一个单例东西
ScalaPower.scala
package org.fun
class ScalaPower
object ScalaPower{
def showMyPower(time:Int) = {
(0 to time-1).mkString(", ")
}
}
Run Code Online (Sandbox Code Playgroud)
现在,在OldJava.java中
class OldJava {
public void demo(){
System.out.println(?)
}
}
Run Code Online (Sandbox Code Playgroud)
我应该填写什么?以便Java将调用showMyPower方法?我都尝试 org.fun.ScalaPower.showMyPower(10)和org.fun.ScalaPower.getInstance().showMyPower(10)但没有工作.
(使用Jad反编译类文件只显示无意义的代码.)
编辑
我删除class ScalaPower声明和scala按预期生成静态方法.(打电话给org.fun.ScalaPower.showMyPower(10)工作).
不知道它是否是scala编译器中的错误
我正在编写一个C#应用程序,它使用Interop服务来访问本机C++ DLL中的函数.我已经使用了大约10种不同的功能.
现在我不知道如何处理将回调作为参数传递,以便DLL可以调用我的代码.
这是DLL的函数原型:
typedef void (WINAPI * lpfnFunc)(const char *arg1, const char *arg2)
Run Code Online (Sandbox Code Playgroud)
并且允许我传递上述类型的函数:
int WINAPI SetFunc(lpfnFunc f)
Run Code Online (Sandbox Code Playgroud)
这是委托和函数定义的C#代码:
public delegate void Func(string arg1, string arg2);
public static void MyFunc(string arg1, string arg2)
Run Code Online (Sandbox Code Playgroud)
这是我的SetFunc Interop函数的C#代码:
[DllImport("lib.dll", CharSet = CharSet.Ansi)]
public static extern int SetFunc(Func lpfn);
Run Code Online (Sandbox Code Playgroud)
最后这里是我调用SetFunc函数并将其传递给我的回调的代码:
SetFunc(new Func(MyFunc));
Run Code Online (Sandbox Code Playgroud)
不幸的是,我的功能应该被调用.SetFunc函数的返回值是返回Success的错误代码,所以要么它没有调用我的函数,要么因为我的代码错误而无法正常工作.
我有一个与C库互操作的Swift程序.这个C库返回一个char[]内部有数组的结构,如下所示:
struct record
{
char name[8];
};
Run Code Online (Sandbox Code Playgroud)
该定义被正确导入Swift.但是,该字段被解释为8个元素(类型)的元组,我不知道如何使用Swift 转换为a .Int8(Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8)String
没有String接受Int8元组的初始化器,并且似乎不可能获得指向元组的第一个元素的指针(因为类型可以是异构的,这并不奇怪).
现在,我最好的想法是创建一个微小的C函数,它接受一个指向结构本身的指针,并name作为char*指针而不是数组返回,并继续使用它.
然而,是否有纯粹的Swift方式呢?
我正在使用Excel Interop打开xlsx文件并将其另存为pdf文档.在调用"ExportAsFixedFileFormat"方法时,将显示标题为"Publishing"的对话框以指示进度.如何禁止或隐藏此对话框?我在其他论坛上看到了一些没有令人满意的解决方案的类似问题,但希望有人从那时起就解决了这个问题.
码:
Application application = new Application();
application.DisplayAlerts = false; // <- No effect
application.Visible = false; // <- No effect
application.ScreenUpdating = false; // <- No effect
application.UserControl = false; // <- No effect
application.Workbooks.Open(path, Type.Missing, true);
application.DisplayDocumentActionTaskPane = false; // <- No effect
application.Worksheets[1].ExportAsFixedFormat(XlFixedFormatType.xlTypePDF, path);
Run Code Online (Sandbox Code Playgroud) 当我使用DotNet1.1时,我遇到了C#的这个问题
问题是这个.我有一个非托管的DLL,它有一个函数,它接受一个函数指针(以及其他参数).当我在C#代码中声明DLLImport时,我传递了一个委托.但是C#中的委托具有stdcall调用约定,而非托管函数需要cdecl函数指针.因此,我天真的做法导致了崩溃.然后我找到了以下内容:http://www.codeproject.com/KB/cs/cdeclcallback.aspx有些人编写了一个优秀的库,可以根据我的理解改变代理的调用约定,MSIL-hacking.事情进展顺利,直到......
我迁移到VS2008和新版本的.NET.在此版本下,上述库不起作用.我不是真正的C#或.NET专家,说实话,我几乎不了解他的库做了什么(虽然它是开源的),所以我甚至不想尝试将它适应新的.NET.但是,我希望更新版本的C#可以为我的问题提供更好的解决方案.
那么,SO专家,请帮我解决臀部疼痛:)
我试着按照如何在C#教程中打开Excel文件,即在Com选项卡上添加了一个引用Microsoft Office 14.0 Object Library并尝试编译代码:
using Excel = Microsoft.Office.Interop.Excel;
//...
Excel.Application xlApp;
Excel.Workbook xlWorkBook;
Excel.Worksheet xlWorkSheet;
xlApp = new Excel.ApplicationClass();//error here
//...
Run Code Online (Sandbox Code Playgroud)
并且面临编译错误,说
没有为Microsoft.Office.Interop.Excel.ApplicationClass类型定义构造函数.
我错过了什么?