小编Nat*_*ath的帖子

共享点64位上的32位二进制文​​件,试图加载格式不正确的程序

我有很多共享点Web部件等,所有这些都是为任何CPU编译的,它们在32位共享点上运行良好,但是以64位迁移到Server 2008会导致以下错误:

试图加载格式错误的程序。(来自HRESULT的异常:0x8007000B)

从我的阅读来看,它们应该都可以正常工作吗?

c# sharepoint 64-bit

5
推荐指数
1
解决办法
1210
查看次数

SharePoint无法在Windows 2008上加载C++ DLL

我有一个SharePoint DLL,它可以执行一些许可,并且作为代码的一部分,它使用外部C++ DLL来获取硬盘的序列号.

当我在Windows Server 2003上运行此应用程序时,它可以正常工作,但在Windows Server 2008上,整个站点(加载时加载)会不断崩溃和重置.这不是Windows Server 2008 R2,而是64位或32位相同.

如果我Debugger.Break在DLL执行之前放置一个,那么我看到代码到达中断点,然后再也不会再回到DLL中.我确实从函数内部获得了一些调试断言警告,仅在Windows Server 2008中,但我不确定这是否相关.

我创建了一个运行C#DLL的控制台应用程序,后者又加载了C++ DLL,这在Windows Server 2008上完美运行(尽管它确实显示了断言错误,但我现在已经压制了这些).断言错误不是在我的代码中,而是在我的代码中ICtypes.c,而不是我可以调试的东西.

如果我在DLL中放置一个断点,它永远不会被命中,编译器说:

"step in: Stepping over non user code"
Run Code Online (Sandbox Code Playgroud)

如果我尝试使用Visual Studio调试DLL.

我试过包装用于调用DLL的代码:

SPSecurity.RunWithElevatedPrivileges(delegate()
Run Code Online (Sandbox Code Playgroud)

但这也无济于事.

我有这个DLL的源代码,所以这不是一个问题.

如果我从目录中删除DLL,我会收到有关缺少DLL的错误.如果我更换它,请回到没有错误或警告完全失败.

如果我用硬编码字符串替换此代码,整个应用程序工作正常.

任何建议都将非常感激,我无法理解为什么它作为控制台应用程序工作,而不是由SharePoint运行.这是在同一台机器上使用相同的用户帐户...

这是用于调用DLL的代码:

 [DllImport("idDll.dll", EntryPoint = "GetMachineId", SetLastError = true)]
    extern static string GetComponentId([MarshalAs(UnmanagedType.LPStr)]String s);

    public static string GetComponentId()
    {
        Debugger.Break();
        if (_machine == string.Empty)
        {
            string temp = "";
            id= ComponentId.GetComponentId(temp);
        }
        return id;
    }
Run Code Online (Sandbox Code Playgroud)

c# c++ sharepoint dllimport

5
推荐指数
1
解决办法
942
查看次数

后台工人类和使用来自c#中不同类的进度事件传递消息

所以我有一个类在新的后台工作程序中启动一个新类,后台工作程序使用progresschanged部分传回状态消息.

当我尝试并通过键入使用它

classname.Dataworker.reportprogress(5)
Run Code Online (Sandbox Code Playgroud)

从一个单独的类我得到一个错误,我在定义之前使用一个对象.

我发现的例子都使用了一个类和不同的函数.

这可能是一个愚蠢的容易错误,但我只是看不到它,感谢您提供的任何帮助!

我的代码概述如下:

//form class

public static BackgroundWorker bw = new BackgroundWorker();

onbuttonclick
{
        installer install = new installer();
        bw.WorkerReportsProgress = true;
        bw.WorkerSupportsCancellation = true;
        bw.DoWork += class2.aFunction;
        bw.ProgressChanged += new ProgressChangedEventHandler(mainForm_InstallerEvent);
        bw.RunWorkerAsync();
}

private void mainForm_InstallerEvent(object sender, ProgressChangedEventArgs e)
{

        lbl.Text = e.UserState.ToString();
}
Run Code Online (Sandbox Code Playgroud)

//// class2后台工作者类

aFunction
{
        InstallerForm.bw.ReportProgress(5); //errors on this!
}
Run Code Online (Sandbox Code Playgroud)

c# backgroundworker

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

后台工人类取消,设置取消待定标志但不退出

我叫obackgroundworker.CancelAsync(); 在一个后台工作者当前在另一个线程中做一些工作然后使用while(obackgroundworker.IsBusy == true)等待它在退出应用程序之前完成(如果用户在线程离开处理时改变主意并且我想要干净地关闭)

取消挂起的单位正确设置为true但线程没有退出,在工作线程中我有:

backgroundworker obackgroundworker = (backgroundworker)sender;
if (obackgroundworker.cancellationpending == true)
     e.cancel = true;              
Run Code Online (Sandbox Code Playgroud)

应检查取消是否待定,然后将取消的标志设置为true,我认为这也会导致线程实际终止...?或者,当检测到取消实际结束时,是否需要从线程调用其他函数?

我已经阅读了很多使用背景工作者的例子,并且没有报告任何问题.

资料来源:

http://www.albahari.com/threading/part3.aspx http://www.dotneat.net/2009/02/10/BackgroundworkerExample.aspx http://www.codeproject.com/KB/cpp/BackgroundWorker_Threads. ASPX

谢谢

c# backgroundworker request-cancelling

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

c#表单继承事件处理程序触发两次

我继承了一个有一个下一个和后一个按钮的根表单,然后在一些子表单上使用这些按钮,并获得两次调用的按钮,我相信这里将在MSDN中列出的问题:http: //msdn.microsoft.com /en-us/library/e33683a5(VS.71).aspx

我将如何应用他们给C#而不是VB的建议?

感谢,我的所有按钮都被调用两次会导致很多问题.

码:

根形式

public partial class rootForm : Form
    {
        public rootForm()
        {
            InitializeComponent();
        }

        private void rootForm_Load(object sender, EventArgs e)
        {
            //used for all generic strings e.g. buttons
            this.Text = Resources.UIStrings.FormTitle.ToString();
            this.btnNext.Text = Resources.UIStrings.btnNext.ToString();
            this.btnBack.Text = Resources.UIStrings.btnBack.ToString();
        }
Run Code Online (Sandbox Code Playgroud)

来自设计师:

        // btnNext
        // 
        this.btnNext.DialogResult = System.Windows.Forms.DialogResult.Cancel;
        resources.ApplyResources(this.btnNext, "btnNext");
        this.btnNext.Name = "btnNext";
        this.btnNext.UseVisualStyleBackColor = true;
Run Code Online (Sandbox Code Playgroud)

安装表格

来自设计师

        // 
        // btnNext
        // 
        this.btnNext.Location = new System.Drawing.Point(373, 360);
        this.btnNext.Size = new System.Drawing.Size(99, 23);
        this.btnNext.TabIndex = 7;
        this.btnNext.Text …
Run Code Online (Sandbox Code Playgroud)

c# inheritance button

0
推荐指数
1
解决办法
5250
查看次数